- python 万物皆对象
- 在程序中,先有类后有对象
- 面向对象的核心:类和对象 封装继承多态
- 对象:
- 类对象(1个)
- 实例对象(n个)
- 在定义类的普通方法时要求[[[第一个参数]]]需要对应调用方法时所使用的实例对象 (一般命名为self) 实例对象名.方法名(实参列表)
- Tips:在通过类的实例对象调用类中的普通方法时,并不需要传入self参数的值,self会自动对应调用该方法时所使用的对象。 类中的普通方法只能通过实例对象调用,而不能通过类名直接调用(通过实例对象调用时会自动将该实例对象传给self,而通过类调用时则不会有这个隐含的参数传递)
- 属性:(类的成员1)
- 类属性
- 位置:类的里面,方法的外面
- ?:都有一个+抽象
- 访问/修改:类对象(推荐)+实例对象
- 实例属性
- 位置:类的里面并且在方法的里面
- ?:都有+值可能不一样+有几个
- 增加/修改/访问:实例对象
- 若以”__“开头则为私有属性 若想在类外访问私有属性,格式为:实例对象名._类名__私有属性名
- 方法:(类的成员2) self当前实例对象,cls当前类对象
- 类方法(@classmethod装饰器:标识一下,我下面写的是静态方法)
- 访问/修改:类对象(推荐)+实例对象
- 实例方法
- c.访问/修改:实例对象
- 特殊方法:
- 内置方法:
- __new__(开辟内存空间【只要有类的声明就开辟新的空间,在新建对象时调用本方法返回信息】)
- __str__(用到print时调用该方法,有内置调内置,有则调自己类中)
- __len__(len(lst)==lst.__len__)
- 构造方法:__init__(在创建一个类时自动执行。负责完成新建对象的初始化,子类不能够自动调用父类的__init__方法,可以重写)
- 析构方法:__del__(在销毁一个对象时自动执行。负责完成新建对象的销毁)
- 静态方法(一般不会被实例对象调用)
- 继承:
- class 子类名(父类名1,父类名2...【前面的优先级高,名相同则使用前面的方法或属性】)
- __mro__(查看类的优先级【我本身的优先级最高】)
- 重写同名方法1:父类名.重名方法(self)【self必须写,如果使用子类调用方法,会出现递归调用,进入死循环——>不建议使用】
- 重写同名方法2:super().重名方法()【可以写参数也可以不写】 super([子类名[,对象名或类名]]).方法名
- object:所有类的父类 第一个参数是要获取父类代理对象的类名 第二个参数如果传入对象名,则该对象所属的类必须是第一个参数指定的
class Users: # 类名
count = 0
__id = "Unknown"
name = "用户"
age = "0"
tel = "Unknown"
@classmethod
def test(cls):
Users.count += 1
print("当前实例对象共有%s人" % cls.count)
def __init__(self, name1):
self.name = name1
print("构造方法被调用")
def __str__(self):
return f"我是{self.name}"
def __len__(self):
return len(self.name)
def SetInfo(self, new_name, new_id):
self.name = new_name
self.__id = new_id
def SetName(self, new_name):
self.name = new_name
def PrintName(self):
print("姓名{},身份证号{}".format(self.name, self.__id))
def __del__(self):
print("析构{}".format(self.name))
class Manger(Users):
def __init__(self, name, ide=5):
# super().__init__(self, ide)
Users().__init__(self, name, ide)
print("子类的构造方法")
def search(self):
print("新增用户")
if __name__ == "__main__":
user1 = Users("张三丰")
# user1.addr = "中山路"
# user1.SetName("小宝")
# user1.SetInfo("123", "123456789")
# user2 = Users()
# user3 = Users()
# user2.SetName("小李")
# user2.PrintName()
# user3.PrintName()
# user1.PrintName()
# user3.SetName("154")
# user3.PrintName()
# Users.test()
# user3.test()
# user1.test()
# user2.test()
# manger1 = Manger("123456", 123)
# print(manger1.__len__())
print(user1.__len__())