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
def say ( self) :
print ( "aaa" )
def talk ( self) :
print ( "sss" )
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
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
河北张家口
{}