'''一,面向对象的进阶
成员
(字段 静态字段(每个对象都有一份用 (区别:没self)),普通字段(每个对象都不同的数据用(区别:有self))
方法 静态方法(无需使用对象封装的内用用 (区别:没self)),类方法,普通方法(使用对象中的数据用(区别:有self)),
特性 普通特性(将方法伪造成字段的方法去执行,前提是要创建一个值去接收它。)
)
通过类访问:静态字段,静态方法(staticmethod),类方法(classmethod)
通过对象访问:普通字段,类的方法。
————快速判断,类执行,对象执行 调用(有self用对象调用。无self用类调用)
成员修饰符
面向对象中一些常用特殊方法 __init__ __call__ __delitem__
二,异常处理
三,单列模式'''
'''
导入模块
m = __import__('python',fromlist = True)
去模块中寻找类
class_name = getattr(m,'Foo')
根据类创建对象
obj = class_name('Alex')
去对象中寻找name对应的值
val = getattr(obj,'name')
'''
class Foo:
#静态字段
country = 'china'
def __init__(self,name):
#普通字段
self.name = name
#普通方法
def show(self):
print('111')
@classmethod
def xxoo(cls):
print('class')
#静态方法
@staticmethod
def xx():
print('22')
#特性,将方法伪造成一种字段的形式
@property
def end(self):
temp = '%s pp'%self.name
return temp
@end.setter
def end(self,velue):
print(velue)
#类访问静态字段
print(Foo.country)
#类访问静态方法
Foo.xx()
#类访问类方法
Foo.xxoo()
#特性伪造成字段的形式去访问,不用加括号。
obj = Foo('奥巴马')
print(obj.end)
#字段可以重新复制
Foo.country = '中国'
print(Foo.country)
'''字段既然可以重新赋值,那么伪造静态的形式,是否也可以进行重新赋值呢。当然OK了。前提是要创建一个值去接收它。 '''
Foo.end = '123'
print(Foo.end)
'''
成员修饰符
(在python 里面只有两种,公有 私有,)
私有的 只有在自己类中能调用,其它任何地方都不能访问, 包括子类。
如果想要调用私有的,必须借助内部方法来执行。
普通字段,静态字段,普通方法 ,静态方法,类方法,普通特性
__call__ 执行方法 Foo()(), 或者把类赋给一个对象,然后对象 加括号执行 r = Foo(), r()。
__getitem__执行方法,对象[]中括号去执行 t['adfa']
——setitem__执行方法,t['yy'] = 'uu' 就相当于給字典的一个添加 键 值
——delitem__执行方法, del t['adfa'] 就相当于字典中删除某个 值
__dict__ 执行方法,查看对象和类里面的方法, print(对象.__dict__) print(类.__dict__)
'''
class Foo:
"""
我是类的注释
"""
oo = 'xx' #(属于公共的,内部外部都可以调用)
__xx = 'oo'#(成员修饰符,只有内部可以调用,)
def __init__(self):
self.name = '牛'
def __call__(self):
print('call')
def __getitem__(self,item):
print(item)
def __setitem__(self,keys,value):
print(keys,value)
def __delitem__(self,keys):
print(keys)
def fetch(self):
print(Foo.__xx)
print(Foo.__add())
@staticmethod
def __add():
print('class')
'''
print(Foo.oo)
print(Foo.__xx)
'''
t = Foo()
t.fetch()
t()
t['adfa']
t['yy'] = 'uu'
del t['adfa']
print(t.__dict__)
print(Foo.__dict__)
'''异常处理'''
inp = input('输入数字')
try:
mun = int(inp)
print(mun)
#'''Exception 是一个 错误库,判断此代码出现的错误类型,然后赋值一个 对象名 接收'''
except Exception as w:
print(w)
''' 主动触发错误 '''
try:
print('123')
raise Exception('出错了...')
except Exception as e:
print(e)
class Foo:
def __init__(self,arg):
self.ox = arg
def __str__(self):
return self.ox
obj = Foo('出错了')
print(obj)
'''assert断言, 判断是否为异常,如果是异常就会报错。'''
assert 1==1
assert 1==2