1、静态字段和普通字段
class Foo:
#静态字段,保存在类的内存
cc='1234'
def __init__(self):
#动态字段(普通字段),保存在对象中
self.name = 'alex'
def show(self):
print(self.name)
'''
如果普通字段是一个固定的值,像 country = ‘china’一样,每个类中都会有
造成内存浪费,所有将有固定值得普通字段改成静态字段
静态字段在加载代码的时候创建,普通字段在创建实例的时候创建
'''
class province():
def __init__(self,name):
self.name = name
country = 'china'
hn= province('henan')
hb = province('hebei')
'''
普通字段只能用对象访问
静态字段用类访问(万不得已的时候用对象访问)
'''
class province():
country = 'china'
#普通方法,由对象去调用执行(方法属于类)
def __init__(self,name):
self.name = name
hn= province('henan')
print(province.country)
print(hn.country)
2、静态方法,类方法
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'''
普通方法:至少一个self 对象执行
静态方法:任意参数,没有self 类执行(对象也可以执行)
类方法:至少一个cls 类执行(对象也可以执行)
'''
'''静态方法'''
class province():
country = 'china'
'''普通方法,由对象去调用执行(方法属于类)'''
def __init__(self, name):
self.name = name
def show(self):
print(self.name)
'''
静态方法,通过类调用,和静态字段相似,在不创建对象的时候可以调用
相当于python的函数,写在类里面的原因是因为和类相关,如果和类都没有关系
完全可以单独写一个函数
'''
@staticmethod
def f1(arg1,arg2):
print(arg1,arg2)
'''
类方法,必须有的一个参数是cls,类方法是静态方法的一种特殊情况,和静态方法对比来说
类方法会自动传给类方法一个类名,而静态方法不会传递
参数cls:这个类的类名
'''
@classmethod
def f2(cls):
print(cls)
province.f1('a','b')
class province():
def __init__(self,all_count):
self.all_count = all_count
'''
属性:调用的时候不用加()
此时,只能取值,不能传值,如果想要传值,则要重新写一个名字相同的方法
然后加一个装饰器,@函数名.setter
如果想要删除,加一个装饰器 @函数名.deleter
综合以上可以用这样的形式:
def f1():
pass
def f2():
pass
def f3():
pass
foo = property(fget = f1, fset = f2, fdel = f3) 在类外面,这样调用:
p.foo ==> fget=all_pager()
p.foo = '100' ==> fset=all_pager()
del p.foo ==> fdel=all_pager()
'''
@property
def all_pager(self):
print(self.all_count)
@all_pager.setter
def all_pager(self,value):
print(value)
@all_pager.deleter
def all_pager(self):
print('del all_pager')
p = province(100)
# p.all_count()
p.all_pager
p.all_pager = 10
del p.all_pager #关联方式,这个代码会执行
3、私有字段
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
class foo:
'''私有静态字段
和私有字段一样,只能在类内进行访问
'''
__cc = '123'
def __init__(self,name,age):
'''共有字段'''
self.name=name
'''私有字段,只能在本类内使用,继承也不行'''
self__age = age
obj = foo('name',23)
print(obj.name)
'''
print(obj.age)
由于age是私有字段,所有在类外访问的时候会异常,
AttributeError: 'foo' object has no attribute 'age'''