当前位置 : 主页 > 编程语言 > python >

Python OOP-5

来源:互联网 收集:自由互联 发布时间:2022-07-13
12. 所用软件 画图软件:Faststone capture 13. 抽象类 抽象方法:没有具体实现内容的方法称为抽象方法 抽象方法的主要意义是规范了子类的行为和接口 抽象的使用需要借助abc模块 import a


12. 所用软件

  • 画图软件:Faststone capture

13. 抽象类

  • 抽象方法:没有具体实现内容的方法称为抽象方法
  • 抽象方法的主要意义是规范了子类的行为和接口
  • 抽象的使用需要借助abc模块
import abc
  • 抽象类:包含抽象方法的类叫做抽象类,通常成为ABC类
  • 抽象类的使用
  • 抽象类可以包含抽象方法,也可以包含具体方法
  • 抽象类中可以有方法也可以有属性
  • 抽象类不允许直接实例化
  • 必须继承才可以使用,且继承的子类必须实现所有继承来的抽象方法
  • 假定子类没有实现所有继承的抽象方法,子类也不能实例化
  • 抽象类的主要作用是设定类的标准,以便于开发的时候具有统一的规范

14. 自定义类

  • 类其实是一个类定义和各种方法的自由组合
  • 可以定义类和函数,然后自己通过类来直接赋值
  • 可以借助于MethodType实现
  • 借助于type实现
  • 利用元类实现- MetaClass
  • 元类是类
  • 被用来创造别的类
# 变量的三种用法

class A():
def __init__(self):
self.name = "haha"
self.age = 18

a = A()
# 属性的三种用法
# 1. 赋值
# 2. 读取
# 3. 删除
a.name = "ruochen"
print(a.name)
del a.name
# print(a.name)ruochen# 类属性 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 + "1"
# fdel模拟的是删除变量的时候进行的操作
def fdel(self):
pass

# property的四个参数顺序的固定的
# 第一个参数代表读取的时候需要调用的函数
# 第二个参数代表写入的时候需要调用的函数
# 第三个是删除
name2 = property(fget, fset, fdel, "这是一个property的例子")

a = A()
print(a.name)

print(a.name2)haha
我被读取了
haha# 抽象

class Animel():

def sayHello(self):
pass

class Dog(Animel):

def sayHello(self):
print("问一下对方")

class Person(Animel):

def sayHello(self):
print("Kiss me")

d = Dog()
d.sayHello()

p = Person()
p.sayHello()问一下对方
Kiss me# 抽象类的实现

import abc

# 声明一个类并且指定当前类的元类
class Hunam(metaclass=abc.ABCMeta):

# 定义一个抽象的方法
@abc.abstractmethod
def smoking(self):
pass

# 定义类抽象方法
@abc.abstractclassmethod
def drink():
pass

# 定义静态抽象方法
@abc.abstractstaticmethod
def play():
pass

def sleep(self):
print("Sleeping......")# 函数名可以当变量使用

def sayHello(name):
print("{}你好".format(name))

sayHello("A")

liumang = sayHello

liumang("A")A你好
A你好# 自己组装一个类

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()Saying... ...
Saying... ...
Saying... ...# 组装类例子 2
# 自己组装一个类
from types import MethodType
class A():
pass

def say(self):
print("Saying... ...")

a = A()
a.say = MethodType(say, A)
a.say()Saying... ...help(MethodType)Help on class method in module builtins:

class method(object)
| method(function, instance)
|
| Create a bound instance method object.
|
| Methods defined here:
|
| __call__(self, /, *args, **kwargs)
| Call self as a function.
|
| __delattr__(self, name, /)
| Implement delattr(self, name).
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __get__(self, instance, owner, /)
| Return an attribute of instance, which is of type owner.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __gt__(self, value, /)
| Return self>value.
|
| __hash__(self, /)
| Return hash(self).
|
| __le__(self, value, /)
| Return self<=value.
|
| __lt__(self, value, /)
| Return self<value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __reduce__(...)
| Helper for pickle.
|
| __repr__(self, /)
| Return repr(self).
|
| __setattr__(self, name, value, /)
| Implement setattr(self, name, value).
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __func__
| the function (or other callable) implementing a method
|
| __self__
| the instance to which a method is boundtype(8)int# 利用type造一个类

# 先定义类应该具有的成员函数
def say(self):
print("Saying... ...")

def talk(self):
print("Talking... ...")

# 利用type来创建一个类
A = type("AName", (object, ), {"class_say":say, "class_talk":talk})

# 然后可以像正常一样使用类
a = A()
dir(a)
a.class_say()Saying... ...# 元类演示

# 元类写法是固定的,他必须继承于type
# 元类一般命名以MetaClass结尾
class CMetaClass(type):
# 注意以下写法
def __new__(cls, name, bases, attrs):
# 自己的业务处理
print("我是元类")
attrs['id'] = '000000'
attrs['addr'] = "1"
return type.__new__(cls, name, bases, attrs)

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

t = Teacher()

t.__dict__
t.id我是元类





'000000'


上一篇:Python OOP-4
下一篇:没有了
网友评论