
关于类对象、实例对象、类方法、实例方法、类属性、实例属性、静态方法
class province():
country='China'
def __init__(self,name,m):
self.name=name
self.economy=m
x=province("shanxi",None)
print(x.name)
x.country='us'
x.name='jiujinshan'
x.economy='well'
print(x.name,x.country,x.economy)
输出结果为shanxi
jiujinshan us well
总结:province是一个类对象,可理解为一个模板,而x作为一个实例对象。country是类属性,而name,economy都是实例属性。
在一个类中,最外层定义的方法是实例方法,在实例方法中,可以用实例名调用实例变量和实例中的类变量,也可以用类名调用类变量(ok方法中的内容),实例对象可以调用实例方法,而类对象不可以调用实例方法,即province.ok()是不成立的
class province():
country='China'
def __init__(self,name,m):
self.name=name
self.economy=m
def ok(self):
print(self.economy)
print(self.country)
print(self.name)
print(province.country)
x=province("shanxi",None)
print(x.name)
x.country='us'
x.name='jiujinshan'
x.economy='well'
x.ok()
在类中加@classmethod定义的是类方法,在类方法中,用cls代替类对象,调用类变量。
class province():
country='China'
def __init__(self,name,m):
self.name=name
self.economy=m
def ok(self):
print(self.economy)
print(self.country)
print(self.name)
print(province.country)
@classmethod
def leifangfa(cls):
print(cls.country)
province.leifangfa()
x=province(None,None)
x.country='USA'
x.leifangfa()
而输出是两个china。
在类方法中,加入实例对象,不仅可以访问类变量,还可以访问实例变量
class province():
country='China'
def __init__(self,name,m):
self.name=name
self.economy=m
def ok(self):
print(self.economy)
print(self.country)
print(self.name)
print(province.country)
@classmethod
def leifangfa(cls,x):
print(cls.country,x.country,x.name)
x=province(None,None)
x.country='USA'
x.leifangfa(x)
输出结果为
China USA None
如果需要在静态方法中使用类变量的话,直接调用(province.country)即可,如果需要使用实例变量,传入实例对象的指针即可
综上进行一个小总结,即实例方法只能用实例对象调用,其他两个方法类和对象都能调用,且三个方法都能实现对类变量和实例变量的调用