Python系统学习第十四课

#类属性 property
#对变量除了普通的三种操作,还想增加一些附加的操作,那么可以通过property完成
class A():
    def __init__(self):
        self.name = "mmm"
        self.age = 18
        #此功能是对类变量进行读取操作的时候应该执行的函数功能
    def fget(self):
            print("duqu")
            return self.name
        #模拟的是对变量进行写操作的时候执行的功能
    def fset(self, name):
            print("xieru")
            self.name = "liziqiang" + name
        #模拟的是删除变量的时候进行的操作
    def fdel(self):
            pass
        
    name2 = property(fget, fset, fdel, " shuoming")   #顺序位置也要注意,第一个参数:读取,第二个参数:写入,第三个参数:删除
    
a = A()
print(a.name)
print(a.name2)
a.name2 = "哈工大"
print(a.name2)
mmm
duqu
mmm
xieru
duqu
liziqiang哈工大

抽象类

  • 抽象方法:没有具体实现内容的方法成为抽象方法
  • 抽象方法的主要意义是规范了子类的行为和接口
  • 抽象类的使用需要借助abc模块
  • 抽象类:包含抽象方法的类叫抽象类
#抽象
class AB():
    def say(self):
        print("1")
class AC():
    def say(self):
        print("2")
class AD():
    def say(self):
        print("3")
a = AB()
a.say()
c = AD()
c.say()
1
3
# 抽象类的实现
import abc
#声明一个类并且指定当前类的元类
class Human(metaclass = abc.ABCMeta):
    #定义一个抽象的方法
    @abc.abstractmethod
    def smoking(self):
        pass 
    #定义类的抽象方法
    @abc.abstractclassmethod
    def drink():
        pass 
    #定义静态抽象方法
    @abc.abstractstaticmethod
    def play():
        pass
    
    def sleep(self):
        pass
        
  • 抽象类的使用
    • 抽象类可以包含抽象方法,也可以包含具体方法
    • 抽象类中可以有方法也可以有属性
    • 抽象类不允许直接实例化
    • 必须继承才可以使用,且继承的子类必须实现所有继承来的抽象方法
    • 假定子类没有实现所有继承的抽象方法,则子类也不能实例化
    • 抽象类的主要作用是设定类的标准,以便于开发的时候有统一的规范
#函数名可以当变量使用
def say(name):
    print("aa")
    
say("ss")

lizi = say
lizi("ee")
aa
aa
#自己组装一个类
from types import MethodType
class A():
    pass
def say(self):
    print("aaa")
a = A()
a.say = MethodType(say, A)   #将一个函数和一个类组装到了一起

a.say()
aaa
#利用type创建一个类

#先定义成员函数
def say(self):
    print("aaa")
    
def talk(self):
    print("sss")
    
#用type创建一个类
A = type("AName", (object, ), {"class_say":say, "class_talk":talk})

a = A()
#然后像正常访问一样访问
dir(a)
a.class_say()
a.class_talk()
aaa
sss

类其实是一个类定义和各种方法的自由组合

  • 可以定义类和函数,然后自己通过类直接赋值
  • 可以借助于MethodType实现
  • 借助于type实现
  • 利用元类实现- MetaClass
    • 元类是类,
    • 被用来创造别的类
#元类演示
# 元类写法是固定的,必须继承自type
#元类命名一般以MetaClass结尾
class TulingMetaClass(type):
    #注意以下写法
    def __new__(cls, name, bases, attrs):
        #内容
        print("mmmmm")
        attrs['id'] = '123456'
        attrs['addr'] = "河北张家口"
        return type.__new__(cls, name, bases, attrs)

#元类定义完就可以使用,使用注意写法
class Teacher(object, metaclass=TulingMetaClass):
    pass

t = Teacher()
print(t.id)
print(t.addr)

t.__dict__
    
mmmmm
123456
河北张家口





{}

猜你喜欢

转载自blog.csdn.net/qq_42633819/article/details/85692397