python中面向对象之类属性 对象属性 类方法 对象方法 静态方法的理解

属性和方法是面向对象中的叫法,一般是一个类被定义的时候会被用户添加.其中属性有:类属性和对象属性,方法有:类方法 对象方法 静态方法.
1.类属性:直接声明在类中的变量属于类的属性,可以被类直接调用,也可以被实例化的对象调用.

class Person(object):
    country = '中国'

    def f1(self):
        print("这是对象方法")

obj1 = Person()
print(Person.country,obj1.country)

运行结果:

中国 中国

需要注意的是,通过对象调用去修改它的值是不生效的.

class Person(object):
    country = '中国'

    def f1(self):
        print("这是对象方法")

obj1 = Person()
print(Person.country,obj1.country)
print(obj1.__dict__)
obj1.country = '美国'
print(Person.country,obj1.country)
print(obj1.__dict__)

运行结果:

中国 中国
{}
中国 美国
{'country': '美国'}

可以看到类变量的值没有改变,也就是上面试图去修改类变量的值,python会自动创建一个country对象变量,并赋值为美国,通过__dict__查看对象obj1的属性可以看到增加了country的对象属性.
2.对象属性:在类中的方法中声明的变量,只属于对象,调用的方法为self.变量名,或者对象名.变量名.

class Person(object):
    country = '中国'
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def getInfo(self):
        print(self.name,self.age,self.country)

obj1 = Person('张三',18)
print(obj1.name)
print(obj1.age)

运行结果:

张三
18

3.类方法:在类定义的方法,且使用@classmethod修饰的,形参为cls的,这样的方法就是类方法.类方法可以被类直接调用,也可以被对象调用.

class Person(object):
    country = '中国'
    def __init__(self, name, age):
        self.name = name
        self.age = age
    @classmethod
    def getInfo(cls):
        print(cls.country)

obj1 = Person('张三', 18)
print(obj1.name)
print(obj1.age)
Person.getInfo()
obj1.getInfo()

运行结果:

张三
18
中国
中国

4.对象方法:在类定义的,形参为self的.可以被对象调用.

class Person(object):
    country = '中国'
    def __init__(self, name, age):
        self.name = name
        self.age = age
    @classmethod
    def getInfo(cls):
        print(cls.country)

    def getTest(self):
        self.getInfo()
obj1 = Person('张三', 18)
print(obj1.name)
print(obj1.age)
Person.getInfo()
obj1.getInfo()
obj1.getTest()

运行结果:

张三
18
中国
中国
中国

上面的__Init__()和getTest()均是对象方法.

5.静态方法:使用@staticmethod声明的,参数没有要求,可以被类直接调用,也可以被对象调用.与类方法,对象方法直接没有什么关联,只是表示该方法属于在这个类定义的命名空间中.

class Person:
    @classmethod
    def class_method(cls):
        print('class = {0.__name__} ({0})'.format(cls))

        cls.HEIGHT = 170

    @staticmethod
    def sta_fun():
        print("这是静态方法")

Person.class_method()
print(Person.__dict__)
obj = Person()
Person.sta_fun()
obj.sta_fun()

运行结果:

class = Person (<class '__main__.Person'>)
{'__module__': '__main__', 'class_method': <classmethod object at 0x000001BBBB80A240>, 'sta_fun': <staticmethod object at 0x000001BBBB80A0F0>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None, 'HEIGHT': 170}
这是静态方法
这是静态方法
上一篇:DBHelper 类(网上收集)


下一篇:一个简单的Code First建立