Python学习 5day__基础知识

类的成员描述符

在类中对成员属性进行相关操作而创建的一种方式
get: 获取属性的操作
set:修改或添加属性的操作
delete:删除属性的操作

  使用property函数来使用描述符

    property()

      定义一个Person类,具有name,age两个属性,对于任意输入的姓名,我们希望都用大写保存,年龄用整数保存

class Person():
    # 函数名称可以任意
    def fget(self):
        return self._name *2
    def fset(self, name):
        # 所有输入的姓名以大写保存
        self._name = name.upper()
    def fdel(self):
        self._name = "NoName"

    name = property(fget, fset, fdel, "操作" )# 对成员进行控制

p1 = Person()
p1.name = "xiao gege "
print(p1.name)

 


  类的内置属性

    __dict__: 以字典的方式显示类的成员组成
    __doc__: 获取类的文档信息
    __name__: 获取类的名称,用在模块,就获得模块的名称
    __bases__:获取某个类的所有父类,以元组的形式显示

  类的内置函数举例
 1 class A(object):
 2     '''
 3     这是一个类的内置函数举例
 4     '''
 5     name = "aaa"
 6     print("qqqq")
 7 class B(A):
 8     print("我是B 我爹是A")
 9 
10 print(A.__dict__)
11 print(A.__doc__)
12 print(A.__name__)
13 print(B.__bases__)

 


  类的常用魔术方法

    魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发
    特征:方法名前后有两个下划线
    __init__
    __new__: 对象实例化方法
    __call__:对象当函数使用的时候触发
    __str__: 当对象被当作字符串使用时触发
    __repr__: 返回字符串,和__str__区别不大
    __getattr__: 访问一个不存在的属性时触发
    __setattr__: 队成员属性进行设置的时候触发 # 注意__setattr__中不能对属性进行赋值,否则产生死循环

 1 class Q():
 2 
 3     def __init__(self, name):
 4         print("调用了__init__")
 5         self.name = name
 6     def __call__(self):
 7         print("调用了__call__")
 8     def __str__(self):
 9         return "调用了__str__"
10     def __getattr__(self, item):
11         print("调用了__getattr__")
12     def __setattr__(self, name, value):
13         print("调用了__setattr__")
14         super().__setattr__(name,value)    # 防止死循环,可以调用父类魔法函数
15 
16 q = Q("xiaogege")
17 q()        # 对象当函数使用,,触发__call__
18 print(q)   # 对象当字符串
19 print(q.ppp)
20 q.name = "sha bi"


  类的三种方法

    实例方法: 需要实例化对象才能使用
    静态方法: 不许哟啊实例化,通过类直接使用
    类方法: 不需要实例化

class Person()
    # 实例方法
    def eat(self):
        print(self)
        print("eating......")
    # 类方法
    @classmethod
    def play(cls):
        print(cls)
        print("playing.....")
    # 静态方法
    @staticmethod
    def say():
        print("say......")

 

posted @ 2018-07-17 21:54  Burtit  阅读(193)  评论(0)    收藏  举报