首页 > 其他 > 详细

类 未修改

时间:2020-07-31 22:49:20      阅读:96      评论:0      收藏:0      [点我收藏+]
#子类与父类
class People:
    def __init__(self,name="爸爸"):
        self.age = 99
        self.name = name
        self.sex = ""
        print("父类初始化")
    def out(self):
        print("父类下的name:%s"%(self.name))
    def outage(self):
        print(self.age)

class Student(People):
    def __init__(self,name,age):
        super().__init__(name)
        self.name = name
        self.age = age
        
        print("子类初始化")
    def out(self):
        print("子类下的name:%s"%(self.name))
        super().out()
        People(self.name).out()
        
        super().outage()
        print(super().outage())  # 这一行报错,我想在子类方法内输出父类属性
        print(People().name)
s = Student("wusen",18)
s.out()
"""
子类初始化父类:super().__init__(参数)  
子类内部不可以调用父类属性
子类内部可以调用父类方法 super().fun1()
"""

""" 组合:把一个类的 对象当成另外一个类的属性"""

""" Java里面的接口跟 python继承差不多"""
#https://pypi.org/project/zope.interface/
#抽象类只能被继承不可以被 实例化
import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def eat(self):
        pass
    @abc.abstractmethod
    def sleep(self):
        pass
class Pig(Animal):
    def __init__(self):
        super().__init__()
        
    def eat(self):
        print("猪在吃 饭")
    def sleep(self):
        print("猪在睡觉")
pig1=Pig()
pig1.eat()

        








""" 第二特性 多态 """
#一个类有多个形态   就叫多态
#就跟上面那个抽象类接口里面的方法一样 就是多态性
#记住形参与实参  能把变量归一化
def function(animal):
    animal.sleep()


"""鸭子类型:就是不继承,跟上面效果一样"""
class Text:
    def read(self):
        pass
    def write(self):
        pass
class Disk:
    def read(self):
        pass
    def write(self):
        pass
        


""" 第三大特性 封装 """


    #属性隐藏
class A:
    __name="wusen"
    age=100
    
a=A()
a.age
A.__dict__
#在类内部可以直接使用
#他会把__name 变成 _类__name
#子类无法覆盖父类__开头的属性
a._A__name
#类之后定义就不会变形
a.__y="sadas"
print(a.__y)

""" 这样玩还可以 """
class A:
    def __fun1(self):
        print("A.fun1")
    def fun2(self):
        print("A.fun2")
        self.__fun1()
class B(A):
    def fun1(self):
        print("B.fun1")
b=B()
b.fun2()
""" 隐藏是为了分离内外,
不让他直接访问修改
比如:取款函数   将插卡细节隐藏

"""





""" 装饰器property"""
#把函数当成属性
class People:
    def __init__(self,name,height,weight):
        self.name=name
        self.height=height
        self.weight=weight
    @property
    def bmi(self):
        return self.weight / (self.height ** 2)
p=People("wusen",1.70,70)
p.bmi
#不可以给p.bmi=22  不可以这样写
class People:
    def __init__(self,name,age):
        
        self.__name=name
        self.__age=age
        self.name
    @property
    def name(self):
        print("#"*100)
        return self.__name
    @name.setter
    def name(self,value):
        self.__name=value
    @name.deleter
    def name(self):
        print("不可以删除")
p=People("w",11)
p.name="wusen"
del p.name
p.name 
    
    

"""绑定与非绑定"""
#绑定
#非绑定
class Foo:
    def __init__(self):
        self.name="wusen"
        print("初始化")
    def fun1(self):
        print("fun1")
        print(self.name)
    @classmethod
    def fun2(a):#形参写啥都可以,一般他写cls
        print(a)
        print("fun2")
    @staticmethod#这就是非绑定方法
    def fun3():
        print("fun3")



f=Foo()
f.fun1
f.fun2
f.fun1()
f.fun2()

print(Foo.fun1)
print(Foo.fun2)
print(Foo.fun2())
print(Foo.fun1(f))

Foo.fun3
f.fun3
f.fun3(f)
"""
def   绑定对象:
绑定方法 classmethod 绑定类
非绑定 statucmethod 类和对象都可以调用 ==》就是把类外的函数封装到类内
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++
"""
import hashlib
import time
h=hashlib.md5(str(time.time()).encode("utf-8"))
h.hexdigest()









""" 反射 
需求:用户输入 s="name"
调用
obj.name
而不是obj."name"

"""
class People:
    def __init__(self):
        self.name="wusen"
        self.age=24
    def tell(self):
        print("dsada")
        
p=People()
hasattr(p,"tell") #判断p下有没有这个属性

getattr(p,"nameq","不存在")#不存在就报错了
    fun=getattr(p,"tell","不存在")
    fun()

setattr(p,"namae","asdasd")#不存在也没啥事创建新属性

delattr(p,"namaae")#不存在会报错
    

内置对象

一、isinstance(obj, cls)
检查obj是否是类 cls 的对象

class Foo(object):
    pass
obj = Foo()
isinstance(obj, Foo)
二、issubclass(sub,super)
检查sub类是否是 super 类的派生类

class Foo(object):
    pass
class Bar(Foo):
    pass
issubclass(Bar, Foo)




"item系列 去操作属性  变成字典"
class Foo:
    def __init__(self):
        self.name="wusen"
    def __getitem__(self,item):
        print("getitem",item)
        return self.__dict__[item]
    def __setitem__(self,key,value):
        print(key,value)
    def __delitem__(self,key):
        print(key)

obj=Foo()
obj.__dict__
obj.name
obj["namea"]

#将类变成字典
class People:
    def __init__(self):
        self.name="wusen"
        self.age=24
        
    def __str__(self):
        print("*")
        return "结束"
    def __del__(self):
        print("已删除")
p=People()
print(p)
del p






exec("""print("Nishigouu")""")

 

类 未修改

原文:https://www.cnblogs.com/3-wusen/p/13412310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!