字段
字段分为两种:普通字段和静态字段
普通字段
普通字段,又叫实例属性,在面向对象中属于对象,在对象被创建时产生。也就是说,普通字段只能通过对象来访问,不可通过类访问
——代码如下:
class Ziduan():
#普通字段(实例属性)
def __init__(self):
#通过对象创建普通字段
self.common_fields='我是普通字段'
#实例化
z=Ziduan()
print(z.common_fields)
其中,因为普通字段属于对象,所以在创建不同对象时,会自动创建不同的普通字段保存在内存中。如果这些对象的该字段都彼此相同,此时创建普通字段就会占据不必要的内存。
静态字段
静态字段,属于类,保存在类中,可以通过对象或者通过类来访问。
——代码如下:
class Ziduan():
#静态字段
#直接在类里面创建
stastic_fields='我是静态字段'
#实例化
z=Ziduan()
print(z.stastic_fields)#通过对象访问
print(Ziduan.stastic_fields)#通过类访问
静态字段属于类,创建对象时不会创建新的对象。
方法
普通方法
普通方法又叫实例方法,保存在类中,通过对象或类调用。
——代码如下:
class Method():
#普通方法
def cm(self):
print('我是普通方法')
#实例化
m=Method()
m.cm()#通过对象访问
Method.cm(m)#通过类调用
注意:普通方法保存在类中,在创建对象时不会自动创建新的方法。
普通方法第一个参数必须是该实例对象(默认self)
普通方法可以访问类中的所有成员。
静态方法
通过装饰器@stasticmethod创建,保存在类中,可以通过类、对象调用。
——代码如下:
class Method():
#静态方法
@staticmethod
def stm():
print('我是静态方法')
#实例化
m=Method()
m.stm()#通过对象调用
Method.stm()#通过类调用
静态方法只能访问类中的静态成员,不能在继承中修改。
类方法
通过装饰器@classmethod创建,保存在类中,通过类、对象调用。
——代码如下:
class Method():
#类方法
@classmethod
def cm1(cls):
print('我是类方法')
#实例化
m=Method()
m.cm1()#通过对象调用
Method.cm1()#通过类调用
第一个参数必须是类本身(默认cls)
其中cls代表类本身,类似于普通方法中的self。
Property等
用于以属性的方式调用方法
property
(1)创建方法,只能访问,不能赋值传参。
——代码如下:
class Method():
@property
def cm1(self):
print('property')
m=Method()
m.cm1#访问property
(2)property绑定,实现删改查功能
——代码示例如下:
class Method():
def __init__(self):
self.p=0
def get_p(self):
print(self.p)
def delete_p(self):
del self.p
def set_p(self,new):
self.p=new
prop=property(fget=get_p,fdel=delete_p,fset=set_p)#捆绑
m=Method()
m.prop#查,调用get_p()
m.prop=1#改
del m.prop#删
test.setter
用于通过属性调用方法,传参赋值
——代码如下:
class Method():
@property#先通过property创建
def test(self):
print('property')
@test.setter
def test(self, name):
self.name = name
print(self.name)
m=Method()
m.test=20#赋值,调用@test.setter
test.deleter
用于通过属性进行删除
——测试代码如下:
class Method():
@property#先通过property创建
def test(self):
print('property')
@test.setter
def test(self, name):
self.name = name
print(self.name)
@test.deleter
def test(self):
print(self.name)
del self.name
try:
print(self.name)
except AttributeError:
print('Deleted')
m=Method()
m.test=20#赋值,触发@test.setter
del m.test#del关键字触发@test.deleter