##变量的三种用法
class A ():
def __init__(self):
self._name = 'haha'
a = A()
#属性的三种用法
#1.赋值
#2.读取
#3.删除
a.name = "狗蛋"
print(a.name)
del a.name
print(a.name)
狗蛋
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-6-8363ad424c07> in <module>() 12 print(a.name) 13 del a.name ---> 14 print(a.name) AttributeError: 'A' object has no attribute 'name'
In [10]:
#类属性property
#应用场景:
##对变量除了普通的三种操作,还想增加一些附加的操作,那么可以同过property完成
class A():
def __init__(self):
self.name = 'haha'
self.age = 18
#对变量进行读取操作时应该执行的函数功能
def fget(self):
print('我被读取了')
return self.name
#对变量进行写操作时
def fset(self,n):
print('我被写入了')
self.name = name + "hello"
#删除操作
def fdel(self):
pass
#property三个参数的位置是固定的 先fget,然后fset,最后fdel
name2 = property(fget,fset,fdel,"哈哈哈哈哈哈")
a =A()
print(a.name)
print(a.name2)
haha 我被读取了 haha
抽象类
- 抽象方法:没有具体实现内容的方法称为抽象方法
- 抽象方法的主要意义是规范了子类的行为和接口
- 抽象类的使用需要借助abc模块
- import abc
- 抽象类:包涵抽象方法的类叫做抽象类,通常称为ABC类
- 抽象类的使用
- 抽象类可以包含抽象方法,也可以包含具体的方法
- 抽象类中可以有方法也可以有属性
- 抽象类不允许直接实例化
- 必须继承才能使用,且继承的子类必须实现所继承来的抽象方法
- 假设子类没有实现所有继承的抽象方法,则子类也不能实例化
- 抽象的主要作用是设定类的标准,以便开发的时候具有统一规范
In [12]:
#抽象
class Animel():
def sayHello(self):
pass
class Dog(Animel):
print('闻一下对方')
class Person(Animel):
print('kiss')
d = Dog()
d.sayHello()
p = Person()
p.sayHello()
闻一下对方 kiss
In [16]:
#抽象类的实现
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')
自定义类
- 类其实是一个类定义和各种方法的自由组合
- 可以定义类和函数,然后自己通过类直接赋值
- 可以借助于MethodType实现
- 借助于type实现
- 利用元类实现 MetaClass
- 元类是类,用来创造别的类
In [17]:
#函数名可以当变量使用
def sayHello(name):
print('{0}hello !'.format(name))
sayHello('yueyue')
people = sayHello
people('yueyue')
yueyuehello ! yueyuehello !
In [25]:
#自己组装一个类
class A ():
pass
def say(self):
print('saying')
class B():
def say(self):
print('saying')
say(1)
A.say = say
a = A()
a.say()
b = B()
b.say()
saying saying saying
In [27]:
##自己组装一个类 -2
from types import MethodType #
class A ():
pass
def say(self):
print('saying')
a = A()
a.say = MethodType(say,A) #通过MethodType方法将say与A绑定
a.say()
saying
In [29]:
#type
type(9)#返回了类型
Out[29]:
int
In [33]:
#利用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()
saying talking
In [39]:
#元类演示
#元类写法固定,必须继承自type
#元类一般命名以MetaClass结尾
class WzhiMetaClass(type):
#注意以下写法
def __new__(cls,name,bases,attrs):
print('我是元类')
attrs['id']='0000'
return type.__new__(cls,name,bases,attrs)
#元类定义完就可以使用
class Teacher(object,metaclass=WzhiMetaClass):
pass
t = Teacher()
t.id
我是元类
Out[39]:
'0000'