1.Demo
class test(object):
static_text = 'static test'
def __new__(cls, *args, **kwargs):
print("__new__")
#return wang()
return object.__new__(cls, *args, **kwargs)
def __init__(self):
print("__init__")
self.normal_text = 'normal_text'
def __call__(self):
print('call 911')
def __str__(self):
return "class description"
def normal_function(self):
print('normal function')
@classmethod
def cls_function(cls):
print('cls function')
@classmethod
def cls_function01(cls):
print('cls function')
@staticmethod
def static_method():
print('static method')
@property
def prop(self):
new_price = self.normal_text
return new_price
@prop.setter
def prop(self,value):
self.normal_text = value
@prop.deleter
def prop(self):
del self.normal_text
def _get_post(self):
return self.normal_text
def _set_post(self,value):
self.normal_text = value
def _del_post(self):
print("WANG")
POST = property(_get_post,_set_post,_del_post)
mytest = test()
#ordinary function
print(mytest.normal_text)
mytest.normal_function()
mytest()
print(mytest)
#property
print(mytest.POST)
mytest.POST = 'WANG01'
del mytest.POST
#static method
print(mytest.static_text)
print(test.static_text)
mytest.static_method()
mytest.cls_function()
2.类的初始化过程
- 先调用_new_方法,再调用_init_方法。
- _new_方法常 用于一些设计模式中,如单例模式,平时较少使用
- _init_方法,用于类初始化时一些初始参数的设置,一般写个类的时候,都会有一个_init_方法
mytest = test() # 先__new__,再 __init__
3.类成员
- 字段
静态字段:static_text
# 静态字段调用
print(mytest.static_text)
print(test.static_text)
普通字段:self.normal_text
print(mytest.normal_text) # 普通字段调用
- 方法
普通方法: normal_function
mytest.normal_function()
类方法: cls_function
mytest.cls_function()
test.cls_function()
静态方法: static_method
mytest.static_method()
test.static_method()
- 属性: 有两种设置方法(@property, 或者property)
普通属性
print(mytest.POST)
mytest.POST = 'WANG01'
print(mytest.POST)
del mytest.POST
- _call_方法
mytest() # __call__调用方法
- _str_方法
print(mytest) # __str__调用方法
- 所有成员中,只有普通字段的内容保存在对象中。其他成员,则保存在类中。
- 即此类创建了多少对象,在内存中就有多少个普通字段。面其他成员,无论对象多少,在内存中,只创建一份。
网友评论