python_类与对象总结_继承

一。总结:

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)
运行结果:

 

 



 

posted @ 2020-05-20 19:23  1142783691  阅读(385)  评论(0编辑  收藏  举报