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
cls
如果方法内部 即需要访问 实例属性,又需要访问 类属性,应该定义成什么方法?
答案:实例方法,因为可以通过 类对象.类属性 来访问,但在类方法中无法访问实例属性
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
类对象调用实例方法时,需要传递类对象