当前位置:脚本大全 > > 正文

python变量与对象的关系(Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析)

时间:2021-10-21 07:33:26类别:脚本大全

python变量与对象的关系

Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

本文实例讲述了python面向对象程序设计类变量与成员变量、类方法与成员方法用法。分享给大家供大家参考,具体如下:

类变量与成员变量

在类中声明的变量我们称之为类变量[静态成员变量],

init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量。

类变量直接可以通过类名来调用。

1、若类变量与成员同时存在并且同名

使用对象来调用的时候,获取的结果是成员变量的值,

使用类名来调用,获取的是类变量的值。

2、若类变量存在,成员变量不存在,

使用对象来调用的时候,它首先寻找成员变量,

如果成员变量不存在。则去寻找类变量。

3、若类变量不存在,成员变量存在:

使用类名来调用,则会报错

总结:

类变量通过类名或者对象来调用都不会报错,但是成员变量只能通过对象来调用。

通过对象来修改类属性的时候,只能作用到对象自己本身,作用不到类,

若是通过类名来修改类属性,则只对类变量的值进行修改。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • class person(object):
  •   # 类变量
  •   name = "haha"
  •   age = "19"
  •   height = 170
  •   def __init__(self,name,age,weight):
  •     # 成员变量
  •     self.name = name
  •     self.age = age
  •     self.weight = weight
  •   def sayheight(self):
  •     print(self.height)
  • per = person("xiaoming",19,50)
  • print(per.name)
  • print(person.name)
  • # print(person.weight)
  • per.height = 190
  • print(per.height)
  • print(person.height)
  • print('*********')
  • person.height = 200
  • print(person.height)
  • print(per.height)
  • per.sayheight()
  • 输出:

    xiaoming
    haha
    190
    170
    *********
    200
    190
    190

    类方法与成员方法

    类方法,成员方法

    类方法:使用类名来调用的方法

    成员方法:使用对象来调用的方法

    若一个方法定义在类中,但是没有参数[一般默认self],此时我们只能通过类名来调用

    若我们需要使用到一个类的对象,首先要实例化。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • class person(object):
  •   def __init__(self,name,age):
  •     self.name = name
  •     self.age = age
  •   def say(self):
  •     print("i am %s, i am %d year old"%(self.name,self.age))
  •   def sayhello():
  •     print('hello i am class function')
  • per = person("xiaoming",19)
  • per.say()
  • person.sayhello()
  • 输出:

    i am xiaoming, i am 19 year old
    hello i am class function

    类方法与静态方法

    静态方法

    当调用此方法时,不会将类的实例传递给它。

    在类中定义的函数。

    无需实例化类,就可以调用。它的定义在继承中,是不可变的。

    类方法:

    当调用此方法时,将函数所属的类作为第一个参数传递。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • class a(object):
  •     def foo(self, x):
  •       print("executing foo(%s, %s)" % (self, x))
  •     @classmethod
  •     def class_foo(cls, x):
  •       print("executing class_foo(%s, %s)" % (cls, x))
  •     @staticmethod
  •     def static_foo(x):
  •       print("executing static_foo(%s)" % x)
  •   a = a()
  •   # 调用foo函数,参数传入1
  •   a.foo(1)
  •   # 调用class_foo,参数传入1
  •   a.class_foo(1)
  •   # 调用static_foo,参数传入1
  •   a.static_foo(1)
  •   a.static_foo(1):
  • 输出:

    executing foo(<__main__.a object at 0x0000024f126489b0>, 1)
    executing class_foo(<class '__main__.a'>, 1)
    executing static_foo(1)
    executing static_foo(1)

    下划线

    下划线定义特殊的方法,一般情况下是系统定义名字,
    如:

    __init()____del()__

    前双下划线(age):表示私有类型的变量(privated),只能在本类中进行访问,外界不能直接访问。如__age.

    单下划线(_age):以单下划线开头的表示保护类型变量(protected),

    保护类型的变量只允许本身以及子类访问,不能用于from module import *

    [使用单下划线开头的时候,虽然变量能够直接被访问,但是请把变量视为一个保护类型的变量,尽量不要去访问。

    希望本文所述对大家python程序设计有所帮助。

    原文链接:https://blog.csdn.net/lm_is_dc/article/details/80166817

    上一篇下一篇

    猜您喜欢

    热门推荐