Python入门学习笔记————15(类完结)

##变量的三种用法
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'

猜你喜欢

转载自blog.csdn.net/weixin_42492218/article/details/85395383