第四天(python打卡)

面向对象编程:将变量或函数变私有(在名字前加两个下划线)

    继承(支持多重继承):子类 <---- 基类,父类或超类(PS:如果在子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性)

            重写__init__()方法:

                -调用未绑定的父类方法

                -使用super 函数

    组合         

class Turtle:
    def __init__(self,x):
        self.num = x

class Fish:
    def __init__(self,x):
        self.num = x

class Pool:
    def __init__(self,x,y):
        self.turtle = Turtle(x)
        self.fish = Fish(y)

    def print_num(self):
        print('水池里总共有乌龟%d 只,小鱼%d 条' % (self.turtle.num,self.fish.num))

绑定:Python严格要求方法需要有实例才能被调用。

一些相关的BIF:  issubclass(class,classinfo) , isinstance(object,classinfo) , hasattr() , getattr() , setattr() , delattr()

构造和析构:魔法方法总是被下划线包围,总能够在适当的时候被自动调用

            第一个被调用的:__new__(cls[,...])

            del x !=x.__del__() (在垃圾回收机制时被触发)

                    属性访问:

                            __getattr__ (试图访问不存在的属性时), __getattribute__ (属性被访问时), __setattr__ , __delattr__

    

描述符:将某种特殊类型的类的实例指派给另一个类的属性(实现__get__,  __set__,  __delete__)

>>> class MyDecriptor:
	def __get__(self,instance,owner):
		print("getting...",self,instance,owner)
	def __set__(self,instance,owner):
		print("setting...",self,instance,owner)
	def __delete__(self,instance):
		print("deleting...",self,instance)

		
>>> class Test:
	x = MyDecriptor()

	
>>> test = Test()
>>> test.x

实现摄氏度和华氏度之间的转换:

class Celsius:
    def __init__(self,value=26.0):
        self.value = float(value)

    def __get__(self,instance,owner):
        return self.value
    
    def __set__(self,instance,value):
        self.value = float(value)

class FaHrenheit:
    def __get__(self,instance,owner):
        return instance.cel*1.8+32

    def __set__(self,instance,value):
        instance.cel = (float(value) - 32)/1.8

class Temperature:
    cel = Celsius()
    fah = FaHrenheit()

定制容器:

  协议:相似于其他语言中的接口,但更像是一种指南。

  不可变:__len()__ ,  __getitem__()

class Countlist():
    def __init__(self,*args):
        self.values = [i for i in args]
        self.count = {}.fromkeys(range(len(self.values)),0)

    def __len__(self):
        return len(self.values)

    def __getitem__(self,key):
        self.count[key]+=1
        return self.values[key]

   可变:加上 __setitem__() ,  __delitem__()

  迭代器(字典,序列):iter()  -->  __iter__()  return self 使用在容器上就可使之成为迭代器, next()  -->  __next__() 定义迭代规则


     for循环:  

>>> string = 'haala'
>>> it = iter(string)
>>> while True:
	     try:
		     each = next(it)
	     except StopIteration:
		     break
	     print(each)
>>> for each in string:
	     print(each)

  
>>> class Fibs:
	     def __init__(self,n=20):
		     self.a = 0
		     self.b = 1
		     self.n = n
	     def __iter__(self):
		     return self
	     def __next__(self):
		     self.a,self.b = self.b,self.a+self.b
		     if self.a > self.n:
			     raise StopIteration
		     return self.a

>>> fibs = Fibs()
	     
>>> for each in fibs:
	     print(each)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值