学习笔记(七)类相关

来源:互联网 发布:生命周期假说 知乎 编辑:程序博客网 时间:2024/06/06 02:36

1.class ClassName:

 class_suite#类体由类成员、方法、数据属性组成__init()__#类的构造函数或初始化方法self代表类的实例getattr(obj, name[, default]) : 访问对象的属性。hasattr(obj,name) : 检查是否存在一个属性。setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。delattr(obj, name) : 删除属性class Person:    age = 0 #类变量    def __init__(self,name):#方法,(动态属性)        self.name=name#实例变量,(静态属性)    def pNameInfo(self):        print(self.name)per=Person("ad")Person.pNameInfo(per)#per.pNameInfo()作用相同per.age=30#增加类的属性per.age=40#修改类的属性print(Person.__name__)print(Person.__doc__)print(Person.__dict__)print(Person.__module__)del per.age#删除类的属性del per#删除对象,调用析构函数,若类中没有则调用默认

2.Python内置类属性(通过类名直接调用)

    __dict__ : 类的属性(包含一个字典,由类的数据属性组成)    __doc__ :类的文档字符串    __name__: 类名    __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)    __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)    __str__

3.对象的销毁—实例被释放或者销毁的时候自动执行
  一个引用计数器和一个循环垃圾收集器回收垃圾。
 当对象被创建时, 就创建了一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为0 时,它被垃圾回收。但是回收不是”立即”的,由解释器在适当的时机,将垃圾对象占用的内存空间回收。
 析构函数 del()—del 触发

4.类的继承

 class 派生类名(基类名,...)    class Person(Human):    如果在继承元组中列了一个以上的类,那么它就被称作"多重继承"    1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。    2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数    3Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。 类继承后重写父类方法    class Human:#经典类   新式类的写法:class Human(Object):        def __init__(self,name):            print(self.name)        def pNameInfo(self):            print(self.name)    class Person(Human):        def __init__(self,name):            Human.__init__(self,name)#调用父类的构造函数            super(Person,self).__init__(name)#调用父类的构造函数        def pNameInfo(self):            print(self.name)    多继承    class Rela(object):        def make(self,obj):运算符重载class Vector:   def __init__(self, a, b):      self.a = a      self.b = b   def __str__(self):      return 'Vector (%d, %d)' % (self.a, self.b)   def __add__(self,other):      return Vector(self.a + other.a, self.b + other.b)v1 = Vector(2,10)v2 = Vector(5,-2)print (v1 + v2)

5.类属性与方法 __两个下划线表示私有

    1.类的私有属性        __attrs:#在类内部的方法中使用时用self.__attrs    2.类的方法 def name():    3.类的私有方法        __method在类的内部调用使用self.__methods

6.单下划线、双下划线、头尾双下划线说明:

__foo__: 定义的是特列方法,类似 __init__()_foo: 以单下划线开头表示protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了

7.python不直接支持多态,但是可以间接实现

class Animal:    def __init__(self,name):        self.name=name    def talk(self):        pass    @staticmethod    def Ani_talk(obj):        obj.talk()class Cat(Animal):    def talk(self):        print("miao")class Dog(Animal):    def talk(self):        print("wang")d=Dog("dog")Animal.Ani_talk(d)
原创粉丝点击