python 面向对象
类:用来描述具有相同的属性和方法的对象。对象是类的实例。
类变量:类变量在整个实例化对象中是公用的。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写。
实例变量:定义在方法中的变量,只用于当前实例的类。
继承:一个派生类继承基类的字段和方法。
实例化:类的具体对象。
方法:类中定义的函数。
类定义、实例化类
# 类定义
class Classname:
pass
# 实例化类
x = Classname()
类变量和实例变量的具体用法:
1、类变量用法如下:
class car: # car 属于类对象
color = "白色" #类变量:被所有的类对象所共享
name = "特斯拉"
speed = "360km/h"
def run(self):
print(f'车跑起来了:颜色:{self.color},型号:{self.name}时速:{self.speed}')
c1 = car() # 实例对象
c1.run()
car.color = "蓝色" # 类对象改变变量的值时,所有的对象的颜色都会变成蓝色
2、实例变量用法如下:
class car: # car 属于类对象
def init(self):
self.color = "白色" # 实例变量,为每个实例对象所独有
self.name = "特斯拉"
self.speed = "360km/h"
def run(self):
print(f'车跑起来了,颜色:{self.color},型号:{self.name}时速:{self.speed}')
c1 = car() #实例对象
c1.init() # 此处需要调用init(),不然会报错,
c1.run()
c1.color = "红色" #不调用init(),直接修改,此处会报错
# 需要调用init() 才能进行修改
c1.init()
c1.color = "红色"
c1.run()
构造方法:init()的用法:
class car: # car 属于类对象
def __init__(self): #构造方法,用来初始化对象,创建对象时调用
self.color = "白色" # 实例变量,为每个实例对象所独有
self.name = "特斯拉"
self.speed = "360km/h"
def run(self):
print(f'车跑起来了,颜色:{self.color},型号:{self.name}时速:{self.speed}')
c1 = car() #实例对象
c1.run()
self的含义:self代表类的实例对象,可以调用自身的一些属性
类的方法和函数的区别:方法必须有一个参数为self,而函数可以没有参数。
继承:子类继承父类后,会拥有父类中所有的非私有属性和功能。
class person:
def eat(self):
print("吃饭")
def speak(self):
print("说话")
class student(person): #继承
def study(self):
print("读书学习写作业")
class worker(person):#继承
def work(self):
print("搬砖")
s1 = student()
w1 = worker()
s1.eat()
s1.speak()
s1.study()
w1.speak()
w1.eat()
w1.work()
多继承:一个子类可以继承多个父类
class animal:
def eat(self):
print("吃东西")
class cat:
def catch_mouse(self):
print("抓老鼠")
class persian_cat(cat,animal): # 多继承
def cute(self):
print("卖萌")
c1 = persian_cat()
c1.eat()
c1.cute()
c1.catch_mouse()
多重继承
# 多重继承
class animal:
def eat(self):
print("吃东西")
class cat(animal):
def catch_mouse(self):
print("抓老鼠")
class persian_cat(cat): # persian_cat 继承猫类,而猫类又继承动物类
def cute(self):
print("卖萌")
c1 = persian_cat()
c1.eat()
c1.cute()
c1.catch_mouse()
方法重写:
class animal:
def eat(self):
print("吃东西")
class cat(animal): # 方法的重写
def eat(self):
print("吃鱼")
c1 = cat()
c1.eat()
私有属性
class person:
def __init__(self):
self.__age=0 # 私有属性
def pr(self):
print("您的年龄是:",self.__age)
p1 = person()
p1.__age = 223 # 这个地方不会赋值成功,
p1.pr()
print(p1.__age) #这个地方会报错,私有属性只能在当前类的内部可访问到,
可以定义一个公开的函数来进行年龄修改
class person:
def __init__(self):
self.__age=0 # 私有属性
def pr(self):
print("您的年龄是:",self.__age)
def change_age(self,age):
if 0< age < 120:
self.__age=age
else:
print("年龄不合法")
p1 = person()
p1.change_age(233)
p1.change_age(15)
p1.pr()
异常处理
def mul(a,b):
try:
c = a/b
print(c)
except ZeroDivisionError:
print("除数不能为0!")
except TypeError:
print("类型不统一!")
except:
print("出现未知错误!")
mul(2,3)
mul(2,0) # 除数不能为0
mul('a',1) # 类型不统一