python 三大属性

Posted 钟钟终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 三大属性相关的知识,希望对你有一定的参考价值。

封装

class Student:
    def __init__(self,name,age):
        self.name=name
        self.__age=age #如果该变量不希望被访问,加两个"__"
    def show(self):
        print(self.name,self.__age)
stu=Student('张三',20)
stu.show() #类外访问不到age
print(dir(stu))
print(stu._Student__age) #可以通过此格式访问

继承

class Person():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print(self.name,self.age)
class Stu(Person):
    def __init__(self,name,age,sno):
        super().__init__(name,age)
        self.sno=sno
class Teacher(Person):
    def __init__(self,name,age,ty):
        super().__init__(name,age)
        self.ty=ty
stu1=Stu('张三',20,'1001')
t1=Teacher('李四',50,'20')
stu1.info()
t1.info()

方法重写

class Stu(Person):
    def __init__(self,name,age,sno): #学号
        super().__init__(name,age)   # 继承格式 super()__init__
        self.sno=sno
    def info(self):         #子类重新定义方法
        super().info()
        print(self.sno)
        
class Teacher(Person):
    def __init__(self,name,age,ty): #教龄
        super().__init__(name,age)
        self.ty=ty
        def info(self):     #子类重新定义方法
        super().info()
        print(self.ty)

#object类

class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
#写完这个类,重写__str__方法,用于对这个对象的描述
#分则返回的是地址
    def __str__(self): 
        return f"名字:{self.name}\\t 年龄:{self.age}"
stu=Student('zsy', 19)
print(stu)

多态

#多态
class Animal:
    def __init__(self,species,age):
        self.species=species
        self.age=age
    def eat(self):
        print(f"动物在吃饭")
class Dog(Animal):
    def __init__(self,species,age):
        super().__init__(species,age)
    def eat(self):
        print(f"{self.species}在吃饭,已经{self.age}岁了。")

class Tiger(Animal):
    def __init__(self,species,age):
        super().__init__(species,age)
    def eat(self):
        print(f"{self.species}在吃饭,已经{self.age}岁了。")  
def fun(a1):
    a1.eat()
    
an=Animal('动物',0)
an.eat()
dog1=Dog('哈士奇', 5)
fun(dog1)
t1=Tiger('老虎',7)
fun(t1)

特殊方法和特殊属性

class A:
    pass
class B:
    pass
class C(A,B):
    def __init__(self,name,age):
        self.name=name
        self.age=age
x=C('zsy',20)    
print(x.__dict__)   #实例对象的属性字典

print(x.__class__)  #输出对象所属的类
print(C.__bases__)   #C类的父类
print(C.__mro__)     #类的层次对象

重定义类内方法

a=20
b=100
d=a.__add__(b)

class S:
    def __init__(self,name):
        self.name=name
    def __add__(self,other):
        return self.name+other.name
    def __len__(self):
        return len(self.name)
s1=S('张三')
s2=S('李四')
s_=s1+s2
s=s1.__add__(s2)
print(s_,s)  #实现了两个对象的加法运算(再类内编写__add()__特殊的方法)
 
print('**************************************')
lst=[1,23,4,5,6]
print(len(lst))
print(lst.__len__())
print(len(s1))

浅拷贝和深拷贝

class Cpu:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk
        
# 简单类的等号赋值
# 就是把一个变量放到两个对象当中

#浅拷贝,对象包含的组对象内容不拷贝
#因此,源对象和拷贝对象会引用同一个子对象
cpu1=Cpu()
disk=Disk()
comp1=Computer(cpu1, disk)

import copy
comp2=copy.copy(comp1)
print(comp1,comp1.cpu,comp1.disk)
print(comp2,comp2.cpu,comp2.disk)
#不同对象,子对象却是相同的

#深拷贝,使用deepcopy函数,递归拷贝对象中包含的子对象
#源对象和拷贝对象所有的子对象也不相同
print('----------------------------------------')
comp3=copy.copy(comp1)
print(comp1,comp1.cpu,comp1.disk)
print(comp3,comp3.cpu,comp3.disk)

以上是关于python 三大属性的主要内容,如果未能解决你的问题,请参考以下文章

极智开发 | 讲解 React 组件三大属性之二:props

python类的三大特征

Python之面向对象继承详解以及面向对象三大特性

Python面向对象的三大属性

Python面向对象的三大属性

面向对象三大特性