class Person(): name = "cool guy" @staticmethod def static(self): print("staticmethod", self.name) if __name__ == "__main__": p = Person() p.static()
p.static() TypeError: static() missing 1 required positional argument: 'self'
静态方法不能访问实例属性、类属性、实例方法、类方法
class Person(): name = "cool guy" @staticmethod def static(name): print("staticmethod", name) if __name__ == "__main__": p = Person() Person.static(p.name)
staticmethod cool guy
class person: name = "cool man" @classmethod def class_m(cls): print("--第一个类方法--", id(cls)) print("--第一个类方法--", cls.name) cls.self_m(cls) cls.class_m2() def self_m(self): print("--实例方法--", id(self)) print("--实例方法--", self.name) @classmethod def class_m2(cls): print("--第二个类方法--", id(cls)) p = person() p.name = "bad boy" # 绑定实例属性 p.class_m() person.class_m()
--第一个类方法-- 2381398112712 --第一个类方法-- cool man --实例方法-- 2381398112712 --实例方法-- cool man --第二个类方法-- 2381398112712 --第一个类方法-- 2381398112712 --第一个类方法-- cool man --实例方法-- 2381398112712 --实例方法-- cool man --第二个类方法-- 2381398112712
如果方法内部 即需要访问 实例属性,又需要访问 类属性,应该定义成什么方法?
答案:实例方法,因为可以通过 类对象.类属性 来访问,但在类方法中无法访问实例属性
class Person: name = "cool man" def self_m(self): Person.name = "yep" print(self.name) p = Person() p.name = "bad boy" # 绑定实例属性 p.self_m() Person.self_m(Person)
bad boy yep
类对象调用实例方法时,需要传递类对象