学习笔记(七)类相关
来源:互联网 发布:生命周期假说 知乎 编辑:程序博客网 时间: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参数 3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。 类继承后重写父类方法 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)
阅读全文
0 0
- 学习笔记(七)类相关
- ExtJS4学习笔记七--事件绑定相关
- php学习笔记(七)对象操作相关
- ExtJS4学习笔记七--事件绑定相关
- ExtJS4学习笔记七--事件绑定相关
- scala学习七 package相关
- HTML笔记(七)bootstrap之相关辅助类
- Qt学习笔记(七)容器类
- java学习笔记七——类
- Android 学习笔记之七 Application类
- Allegro学习笔记七
- 汇编语言学习笔记(七)
- C#学习笔记(七)
- HTML学习笔记七
- Struts2学习笔记七
- Lucene学习笔记(七)
- PHP学习笔记七
- Android 学习笔记(七)
- Dubbo 详细介绍
- FutureTask源码解析
- 最完美的“婚”鞋? NMD_R2“囍”(台灣愛迪達)
- Linux如何加载U盘
- ai 资源
- 学习笔记(七)类相关
- JAVA7、JAVA8的堆内存有啥变化
- PTA-线性结构1 两个有序链表序列的合并
- 记maven编译源码版本号不正确
- 第3次课结构化机器学习
- 数据结构学习日记(2)——用栈实现括号匹配
- Java中this和super的用法总结
- STM32F103学习之RCC配置
- 反演变换