类(二)

一、修饰符

    公有成员
    私有成员, __字段名
        - 无法直接访问,只能间接访问

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)

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值