1-2-python基础-OOP5
In [13]:
#变量的三种用法 class A(): def __init__(self): self.name = "haha" self.age =18 a = A() # 属性的三种用法 # 1, 赋值 # 2. 读取 # 3. 删除 a.name = "刘大拿" print(a.name) del a.name #print(a.name)
In [16]:
# 类属性 property # 应用场景: # 对变量除了普通的三种操作,还想增加一些附加的操作,那么可以通过property完成 class A(): def __init__(self): self.name = "haha" self.age =18 # 此功能,是对类变量进行读取操作的时候应该执行的函数功能 def fget(self): print("我被读取了") return self.name # 模拟的是对变量进行写操作的时候执行的功能 def fset(self, name): print("我被写入了,但是还可以左好多事情") self.name = "图灵学院:" + name # fdel模拟的是删除变量的时候进行的操作 def fdel(self): pass # property的四个参数顺序是固定的 # 第一个参数代表读取的时候需要调用的函数 # 第二个参数代表写入的时候需要调用的函数 # 第三个是删除 name2 = property(fget, fset, fdel, "这是一个property的例子") a = A() print(a.name) print(a.name2)
In [20]:
# 抽象 class Animel(): def sayHello(self): pass class Dog(Animel): pass class Person(Animel): def sayHello(self): print("Kiss me") d = Dog() d.sayHello() p = Person() p.sayHello()
In [26]:
# 抽象类的实现 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): print("Sleeping.......")
In [28]:
# 函数名可以当变量使用 def sayHello(name): print("{0}你好,来一发吗?".format(name)) sayHello("月月") liumang = sayHello liumang("yueyue")
In [31]:
# 自己组装一个类 class A(): pass def say(self): print("Saying... ...") class B(): def say(self): print("Saying......") say(9) A.say = say a = A() a.say() b = B() b.say()
In [41]:
# 组装类例子 2 # 自己组装一个类 from types import MethodType class A(): pass def say(self): print("Saying... ...") a = A() a.say = MethodType(say, A) a.say()
In [42]:
type(9)
Out[42]:
In [47]:
# 利用type造一个类 # 先定义类应该具有的成员函数 def say(self): print("Saying.....") def talk(self): print("Talking .....") #用type来创建一个类 A = type("AName", (object, ), {"class_say":say, "class_talk":talk}) # 然后可以像正常访问一样使用类 a = A() a.class_say() a.class_talk()
In [51]:
# 元类演示 # 元类写法是固定的,必须继承自type # 元类一般命名以MetaClass结尾 class TulingMetaClass(type): # 注意以下写法 def __new__(cls, name, bases, attrs): #自己的业务处理 print("哈哈,我是元类呀") attrs['id'] = '000000' attrs['addr'] = "北京海淀区公主坟西翠路12号" return type.__new__(cls, name, bases, attrs) # 元类定义完就可以使用,使用注意写法 class Teacher(object, metaclass=TulingMetaClass): pass t = Teacher() t.id
Out[51]:
In [ ]: