一、修饰符
公有成员
私有成员, __字段名
- 无法直接访问,只能间接访问
class Foo:
__address = 'hunan'
def __init__(self, name):
self.name = name
self.__age = 18
#无法直接访问
@staticmethod
def __stat():
print('this is an stattic methond')
def show(self):
print(Foo.__address)
print(self.__age)
Foo.__stat()
class Soo(Foo):
def __init__(self):
self.salary = 1000
def sshow(self):
print('jjjjk')
#print(self.__age) #无法访问
f = Foo('jiangqijun')
#print(Foo.__address)
f.show()
#Foo.__stat()
s = Soo()
s.sshow()
二、特殊成员
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return 'this is str'
def __int__(self):
return 111
#####这里只是对应调用不同的方法
def __getitem__(self, item):
return item+10
def __setitem__(self, key, value):
print(key, value)
def __delitem__(self,key):
print(key)
#####
#迭代器的三要素
#1、如果类中有__iter__则返回的是一个可迭代的对象
#2、对象.__iter__的返回值是一个迭代器
#3、for循环进行迭代对象的next方法的访问
def __iter__(self):
return iter([11,0])
foo = Foo('jiangqijun',18)
print(foo.__dict__) #将对象的字段以字典的形式返回
print(str(foo))
print(int(foo))
print(foo[1]) #自动执行__getiem__()方法,将1作为参数传入
foo['1'] = 'aa' #自动执行__setitem__()方法
del foo['www'] #自动执行__deliem__()方法
for i in foo:
print(i)
########################
__init__ 类()自动执行
__del__
__call__ 对象() 类()() 自动执行
__int__ int(对象)
__str__ str()
__add__
__dict__ # 讲对象中封装的所有内容通过字典的形式返回
__getitem__ # 切片(slice类型)或者索引
__setitem__
__delitem__
__iter__
# 如果类中有 __iter__ 方法,对象=》可迭代对象
# 对象.__iter__() 的返回值: 迭代器
# for 循环,迭代器,next
# for 循环,可迭代对象,对象.__iter__(),迭代器,next
# 1、执行li对象的类F类中的 __iter__方法,并获取其返回值
# 2、循环上一步中返回的对象
三、反射
import s3
#反射
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def fuc(self):
return self.name
var = 'name'
obj = Foo('jiangqijun', 18)
result = obj.__dict__[var]
print(result)
result1 = getattr(obj, 'name') #获取对象的字段属性
print(result1)
f = getattr(obj, 'fuc') #获取对象的方法属性
print(f())
print(hasattr(obj, 'name')) #判断对象是否含有该方法属性
print(hasattr(obj, '333'))
#obj.sex
setattr(obj, 'sex', 'female')
print(obj.sex)
#delattr(obj, 'name')
#print(obj.name)
v = getattr(s3, 'NAME')
print(v)
f = getattr(s3, 'fuc')
print(f())
四、单例模式
class Foo:
__v = None
def __init__(self):
pass
@classmethod
def get_instance(cls):
if cls.__v is not None:
return cls.__v
else:
cls.__v = Foo()
return cls.__v
obj1 = Foo.get_instance()
obj2 = Foo.get_instance()
obj3 = Foo.get_instance()
print(type(obj1))
print(obj2)
print(obj3)