一。总结:
0 , 什么是类和对象:
类:具备相同特征或者行为的一个群体:
对象: 个体
类:模型 (造对象)
对象: 模型生出来(造出来)具体的东西。
1. 实例属性和类属性的区别
实例可以获取 实例属性和类属性
类只能获取类属性。
类属性定义:类名下面或者类外面, 可以在其他的方法当中定义,但是不建议
例子:
class 类名:
类属性1 = 属性值
def __init__(self, name):
self.name = name
类名.类属性other = 属性值。
实例属性: 类里面和类外面 __init__ 方法定义,或者 类名().实例属性
先天具备的属性,不管是类属性,实例属性,通常在类名下面, __init__ 直接定义好。
后天培养的属性,不管是类还是实例,都可以在 其他的方法当中定义, 类外面定义
类属性和实例属性:
类可以访问实例属性吗?? Man.name ?? 不可以
实例可以访问类属性?? 可以
如果某一个属性名同时是类属性和实例属性。 一般以调用的方法不同取值类属性和实例属性
例子:
class Math:
name=123
def __init__(self):
self.name=456
print(Math.name)
print(Math().name)
运行结果:
如果在一个具体的场景当中,我不知道这个属性用类属性还是实例属性?? 一般选用实例属性
2. 方法
实例方法, 实例具备的,类不一定具备。 类不能调用实例方法 self 获取实例
类方法, 类具备的, 实例可以获取 类方法可以直接通过 cls 获取类
静态方法:放在类里面的函数。 def static_methodo
类(对象).static_methodo
3. __init__ 生孩子的过程,出厂设置。
不要写成 __int__
是对象的初始化过程。通常在里面定义实例属性。
实例属性的值通过参数传递进来。
参数必须要赋值给实例属性 self.shuxing = 参数
才能通过实例调用
4. self
类定义的里面表示 对象。
cls, 类里面表示 类
5, 继承, 继承时单边的。
class Phone:
"""手机"""
def __init__(self, number):
self.number = number
def call(self, to, recorded=False):
"""打电话"""
print(" {} 给 {} 打电话。。".format(self.number, to))
if recorded:
self.record()
def record(self):
"""录音"""
print("{} 正在录音".format(self.number))
class SmartPhone(Phone):
"""智能手机"""
def __init__(self, number, brand):
self.number = number
self.brand = brand
def watch_movie(self, name):
print("正在看电影{}".format(name))
注意:父类不能调用子类方法,Phone是父类,SmartPhone为子类,子类拥有父类所有方法包括自身的方法,可对父类方法进行重写
例子1:父类不能调用子类方法
Phone("苹果").watch_movie("jack")
运行结果:
例子2:子类拥有父类所有方法和自身方法,并可对父类方法进行重写。
#子类调用父类方法
SmartPhone("123","苹果").call("jack")
#子类可以自己定义方法
SmartPhone("123","苹果").watch_movie("一人之下")
运行结果:
6, 重写
#子类重写父类的方法调用子类时,以子类重写方法为主
运行结果:
7, super():超继承
类和对象:多重继承。
注意:超继承只继承父类的方法。
例子:
class LinZai:
def __init__(self, brand, model, size):
pass
def sell(self, param):
print("目前正在直播")
print("没有人来")
print("巨伤心")
class Other(LinZai):
def __init__(self):
pass
def sell(self):
# super() = LinZai('', '', '')
super().sell('data')
print("其他主播人很多")
Other().sell()
运行结果:
8.动态获取属性
1)获取已存在的属性
class Phone:
def __init__(self, number):
self.number = number
phone = Phone('137')
print(getattr(phone,'number'))
运行结果:
2)获取不存在的数据,若属性不存在那么可以自定义返回值。
#获取不存在属性
print(getattr(phone,'name','150'))
运行结果:
#若已存在的属性,通过定义默认返回值,返回的是已存在的属性值
print(getattr(phone,'number','????'))
运行结果:
9.设置 set 属性。
#设置不存在的实例属性(类属性也可以设置)
setattr(phone,'name','999')
print(phone.name)
运行结果: