前言:
方法:方法是动态的是对象的行为,比如一个人可以跑,跳,是指具体做了什么动作或者行为
属性:属性是固有的是对象本身多携带的比如一个人的年龄,名字
类属性和实例属性
1.类属性就相当于全局变量是类对象和实例对象所共有的属性
2.实例对象的属性为实例对象所私有的
class Test(object):Lx = 'python'__age = 27def __init__(self,age):self.age = agepasstest = Test(20)
print(test.age)
print(test.Lx)
print(Test.Lx)
print(Test.age) print(test.__age)
print(Test.__age)
20
python
python
------报错------
------报错------
------报错------
综上:
1.类对象可以访问类属性
2.类对象不能访问实例属性
3.实例对象可以访问实例属性和类属性,和类属性是包含关系
类方法和实例方法对比
1.类方法:类对象所拥有的方法,需要用装饰器@classmethod来标识其为类方法,类方法的第一个参数必须是类对象,类方法可以通过类对象和实例对象调用,类似与类属性可以被类对象和实例对象调用一样
2.实例方法:实例方法的第一个参数是实例对象self,通过self引用类属性或者实例属性,但是在相同名称的类属性和实例属性中,会先调用实例属性,因为实例属性优先级更高
class Test:name = 'Lx'@classmethoddef quety_name(cls):return cls.name @classmethoddef change_name(cls,info):cls.name=info return cls.name@classmethoddef get_name(cls):return Test.name print(Test.quety_name())
print(Test.change_name("kobe"))
print(Test.get_name())
test = Test()
print(test.change_name('James')) 输入结果
Lx
kobe
kobe
James
注意点:
1…cls 指向 类对象(也就是Test)
2.一般以cls作为第一个参数,cls 也可以是其他名称,但是一般默认为cls
静态方法:
1.静态方法不需要额外定义参数,所以在静态方法中引用类属性的话,必须使用类对象的方法来引用
2.Python中的静态方法与python类级别的方法极为相似,不同之处在于静态方法绑定到一个类而不是该类的对象。这意味着可以在没有该类对象的情况下调用静态方法。 这也意味着静态方法无法修改对象的状态,因为它们没有绑定到对象。
创建静态方法有两种方式:
第一种:class Test:def get_result(x,y):result = x + yreturn result
Test.get_result = staticmethod(Test.get_result)
print("result:",Test.get_result(1,2))输出
result: 3第二种:class Test:@staticmethoddef get_result(x,y):result = x + yreturn resultprint("result:",Test.get_result(1,2))输出
result: 3
1.静态方法有一个非常明确的用例。 当我们需要某些功能而不是对象,而需要完整的类时,我们可以使方法静态化。 当我们需要创建Utility方法时,这是非常有利的,因为它们通常与对象生命周期无关。
2.请注意,在静态方法中,我们不需要将self作为第一个参数传递。
import time
class Time:@staticmethoddef showTime():return time.strftime("%H:%M:%S",time.localtime())passprint(Time.showTime())