打赏

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)
 

 

haha
我被读取了
haha
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()

 

 
闻一下对方
Kiss me
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")

 

 
月月你好,来一发吗?
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()

 

 
Saying... ...
Saying... ...
Saying......
In [41]:
# 组装类例子 2
# 自己组装一个类
from types import MethodType

class A():
    pass

def say(self):
    print("Saying... ...")
    
a = A()
a.say = MethodType(say, A)
a.say()

 

 
Saying... ...
In [42]:
type(9)

 

Out[42]:
int
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()

 

 
Saying.....
Talking .....
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]:
'000000'
In [ ]:
 

posted on 2018-11-07 18:31  XuCodeX  阅读(105)  评论(0编辑  收藏  举报

导航