Python3学习笔记-实例变量、实例方法、类变量、类方法、属性方法、静态方法

实例变量/成员变量:在类的声明中,属性是用变量来表示的

实例方法:在类中声明的方法,例如:my(self),必须实例化之后才可以使用,否则会报错

类变量:公共的变量,每个实例都可以用。

类方法: @classmethod

  1、不用实例化就可以直接调用。

  2、它可以通过cls使用类变量

  3、它不能调用这个类里面的其他实例方法和实例变量

  4、不想实例化的时候,就可以定义成类方法

属性方法(self):@property

   @property ,这是个装饰器,把函数变成一个属性方法,如果这个方法没有入参的话,那就可以变成一个属性方法。

  看起来像属性的一个方法,将没有入参的函数变为一个属性方法(类似于变量),结果是函数的返回值

  在使用的时候可以如下面代码所示的 feng.simle, 而不是像其他的方法一样加(), 如 feng.simle()

class Person:

    @property #属性方法
    def smile(self):
        return 'haha'

feng = Person()
print(feng.smile)#属性方法像属性一样调用 # print(feng.smile())#报错,调用属性方法不用加括号

静态方法:@staticmethod

  你不想实例化的时候,就可以定义成类方法

  静态方法就是一个普通函数,只不过是写在类里面而已,它用不了类变量、类方法、实例变量、实例方法

下面从实例中了解这几个知识点的具体用法,代码如下:

class Baby():
    country = 'China' #类变量,公共的变量,每个实例都可以用
    def __init__(self,name):   #带了self的都是实例方法,必须实例化了之后才能调用,否则会报错
        self.name = name  #实例变量,也叫成员变量
        print('self的内存地址',id(self))
    def cry(self):           #实例方法
        print('哇哇哇')

    @property   #这是一个装饰器,也叫属性方法,hhh函数就不能传参数了。如果函数没有入参就可以写property,调用的时候不能加括号了。
    def hhh(self):
        return 198
# b = Baby('a')
# print(b.hhh)       #调用的时候不能加括号,看起来像属性的一个方法。

    @classmethod           #类方法
    def xm(cls):           #cls代表的就是baby
        print(cls.country)
        print('我是类方法')
        # print(cls.name)  #cls不能调用实例变量,会报错
        # cls.cry()        #cls不能调用实例方法,会报错

    @staticmethod        #静态方法
    def xh():
        print('这个是静态方法,它和一个没写在类里面的函数一样')
class Baby():
    country = 'China' #类变量,公共的变量,每个实例都可以用
    def __init__(self,name):   #带了self的都是实例方法,必须实例化了之后才能调用,否则会报错
        self.name = name  #实例变量,也叫成员变量
        print('self的内存地址',id(self))
    def cry(self):           #实例方法
        print('哇哇哇')

    @property   #这是一个装饰器,也叫属性方法,hhh函数就不能传参数了。如果函数没有入参就可以写property,调用的时候不能加括号了。
    def hhh(self):
        return 198
# b = Baby('a')
# print(b.hhh)       #调用的时候不能加括号,看起来像属性的一个方法。

    @classmethod           #类方法
    def xm(cls):           #cls代表的就是baby
        print(cls.country)
        print('我是类方法')
        # print(cls.name)  #cls不能调用实例变量,会报错
        # cls.cry()        #cls不能调用实例方法,会报错

    @staticmethod        #静态方法
    def xh():
        print('这个是静态方法,它和一个没写在类里面的函数一样')

# '''调用静态方法'''
Baby.xh()

# '''调用类变量'''
Baby.country='USA'   #类变量是可以直接通过类名.xxx来进行修改的。

fgf = Baby('fengfeng')
fgf.country = 'UK'     #不会改变类变量的值,只是改变了fgf这个实例中country的值
print(fgf.country)
wz = Baby('wuzhen')
wz.country = 'AUS'
print(wz.country)

# '''装饰器,属性方法'''
b = Baby('baby')
print(b.hhh)    #调用时直接对象.函数名,不需要加括号,看起来像属性的方法

# '''self'''
wz = Baby('wuzhn')
print('wuzhen的内存地址',id(wz)) #与实例化时self的内存地址一致
fgf = Baby('fengfeng')
print('fengfeng的内存',id(fgf)) #与实例化时self的内存地址一致

本类对象:self

  类中的self代表的是本类对象。即self代表的是实例化之后的对象。

  因为函数里面的变量都是局部变量,出了函数就不能用了。用self给对象绑定了之后,就可以在类中self.xx随便用了

原文地址:https://www.cnblogs.com/fenggf/p/9084115.html