Python基础学习系列:
自定义类使用 大写字母开头
class 类名([父类]):
代码块
class Myclass():
pass
# 使用自定义类创建对象
mc = Myclass()
class 类名([父类]):
公共属性...
# 对象初始化方法
def _init_(self,...):
...
# 其他方法
def method_1(self,...):
...
def method_2(self,...):
...
_init_()在新对象创建时初始化属性
_ 开始和结束通过 self 向新创建的对象初始化属性
thisclass Myclass:
def _init_(self,name):
self.name = name
调用类创建对象时,参数列表中的参数会一次传递到 _init()_ 中
类=属性+方法
在类中定义的变量,将成为所有实例的公共属性
类中的函数成为方法
当调用一个对象的属性时,解析器会在当前对象中找是否有该属性
有,则直接返回对象的属性值
无,则去类对象中查找
有,则返回类属性
无,则报错
类属性:所有对象共享的属性
实例属性:某个实例特有的属性
使用
@classmethod修饰的方法
第一个参数为 self ,自动传递,表示当前类对象
class A:
@classmethod
def test(self):
print(self)

第一个参数为
self的方法是实例方法
类和实例都可调用实例方法
self 自动传入
使用
@staticmethod修饰的方法
又称 实例(instance),对象是内存中专门用于存储数据的一块区域
# 内置类创建
a = int(10) # create int object
b = str("hello") # create a string object
id :对象的标识type :对象的类型value :对象的值类是创建对象的对象
init()id 赋值给变量隐藏对象中不希望被外部访问的属性和方法
用于确保对象数据的安全
_属性名 表示隐藏私有属性提供 getter() 和 setter() 方法可以使外部访问到私有属性
get_属性名():
pass
set_属性名():
pass
###
可以在 setter()中增加数据验证,确保数据值的正确性
私有属性实际上将名字修改为
__属性名
# __propertyName
class Person:
def _init_(self,name):
self.__name = name
def set_myname(self,name):
self.__name = name
def get_myname(self):
return self.__name
p = Person()
p.set_myname('name1') # 等价于 p.__name = "name1"
p.get_myname() # 等价于p.__name 'name1'
property 装饰器,将一个
get()方法转换为对象属性
使用 @property 修饰的方法,必须和属性名一样,否则报错
setter() 装饰器:@属性名.settergetter() 装饰器:@property使用 setter 装饰器
class Person:
def _init_(self,name):
self._name = name
# get()方法要在set()方法前,否则报 not defined 错误
@property
def name(self):
return self._name
@name.setter
def name(self,name):
self._name = name
p = Person()
p.name = "name1" # "name1"
子类继承父类中所有方法
class 子类名([父类列表]):
pass
# 省略父类列表,默认为父类的对象
class Animals():
def call(self):
print("动物叫")
class Dogs(Animals):
def call(self):
print("狗叫")
class DD(Dogs,Animals):
def call(self):
print("dd叫")
bool isinstance(instanceName,className) :检查是否是某类的实例
isinstance(a,Animals) # True
bool issubclass(subClassName,className) :检查是否为子类
issubclass(Dogs,Animals) # True
issubclass(DD,Animals) # True
为一个类指定多个父类
父类列表前面方法覆盖后边
子类中有与父类同名的方法,则调用子类方法
a = Animals()
d = Dogs()
a.call() # 动物叫
d.call() # 狗叫
调用父类方法修改父类属性,通过
super()调用父类方法,不需要传递self
def Subclass(SuperClass):
def __init__(self,[Subclass propertyList]):
super().__init__([SuperClass propertyList])
self._propertyName = propertyVlue
className.__bases__获取当前类的所有父类
DD.__bases__
# (, )
不考虑参数类型,只要符合某些特征,就可以使用方法
例如:只要对象中有 __len__() 的特殊方法,就可以通过 len() 方法获取对象长度
以
__开头和结尾
__new__(self)对象创建时调用
__new__(self)函数
__init__(self)对象初始化时调用,定义初始化时的工作
__delete__(self)对象删除前调用
__str__(self)打印的是
str()的返回值
__repr__(self)会对当前对象使用
repr()时调用指定对象在 交互模式(命令行) 中直接输出的效果
__lt__(self,other)小于 <
# 定义 > < >= <= == 时完成的事务
class Person:
def __lt__(self,other):
return True
__le__(self,other)小于等于 <=
__eq__(self,other)等于 ==
__ne__(self,other)不等于 !=
__gt__(self,other)大于
>
__ge__(self,other)大于等于
>=
__add__(self,other)
+
__sub__(self,other)
-
__mul__(self,other)__len__(self)获取对象长度
__bool__(self)定义使用
bool()时的返回值
将一个完整的程序分解成若干个小模块,各个模块组合,搭建一个完整的程序
重要性:复用
一个文件为一个模块
import 模块名多次引用同一模块时,只包含一个实例
import 模块名 as 别名通过
moduleName.__name__可以获取模块名字
一个程序只有一个主模块 __main__
模块中代码过多,则可将一个模块分解为多个模块,被分解的大模块称为包
包:文件夹
模块:.py文件
from packageName import moduleName :引入包中指定模块
包中必须有 __init__ 文件,包含包中主要内容
__pycache__ :模块缓存文件
使用包时,将模块代码转换为机器码,在编译一次后,将代码保存到缓存文件中,避免重复编译
通过变量和函数,可以获取到Python解析器的信息
或者可以通过函数操作解析器
import sys
# sys.argv
# 获取执行代码时,命令行所包含的参数
# 返回列表,保存当前命令的所有参数
# sys.modules
# 获取当前程序中引入的所有模块
# 返回字典,key:模块名字,value:模块内容
# sys.path
# 返回列表,保存模块的搜索路径
# 当前目录优先
# sys.platform
# 表示当前Python运行平台
# sys.exit()
# 退出当前程
import pprint
# pprint()
# 对打印数据做简单格式化
# pprint.pprint()
操作系统模块,对操作系统进行访问
import os
# os.environ[]
# 获取系统的环境
# os.system()
# 执行操作系统的命令
# os.system('dir')
没有被引用的对象称为 垃圾
不需要手动处理垃圾,程序结束时,自动删除垃圾
__delete__(self)在垃圾回收前删除