网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
class Car:
tyre_number = 4 # 车轮个数
tyre_number = 5
print(Car.tyre_number)
print(tyre_number)
我们也可以通过对象去获取类属性,除此之外我们还可以修改一个类属性,但我们修改类属性只能通过类来修改,不能通过对象进行修改:
class Car:
tyre_number = 4 # 车轮个数
my_car = Car()
print(my_car.tyre_number)
"""修改类属性"""
Car.tyre_number = 3
print(f"修改后的轮子数量是:{Car.tyre_number}")
"""新增属性"""
Car.steering_wheel = True
print(Car.steering_wheel)
2.2.2 类属性的定义
类属性除了在类中进行定义,也可以在全局中进行定义:
class Car:
pass
# 全局中定义类属性
Car.wheel = True
print(Car.wheel)
2.2.3 实例方法调用
方法就是类的行为,使用函数的语法,方法就是一个函数,方法有个固定的参数self,方法可以自定义,self代表实例、对象。 如果我想调用一个方法,如下代码所示,这种形式我们也称之为实例方法:
"""
实例方法:通过对象.方法()进行调用
"""
class Car:
"""方法"""
def drive(self):
print("滴滴,开始开车")
# 调用方法
my_car = Car()
my_car.drive()
2.2.4 类方法调用
类方法通过类.方法()进行调用,一个类方法的表示是一个装饰器的方式表示为@classmethod,self替换为cls,则表示为一个类方法:
"""
类方法:通过类.方法()进行调用
"""
class Car:
pass
@classmethod
def color(cls):
my_color = "我是红色,一个类方法"
return my_color
print(Car.color())
2.2.5 静态方法调用
静态方法与类方法类似,静态方法也需要有装饰器,静态方法没有固定参数,静态方法的装饰器表示为@staticmethod,静态方法类和实例都可以调用,静态方法和类、对象没有直接性的关系,可以移出类的管理进行定义:
class Car:
pass
"""静态方法"""
@staticmethod
def color():
color = "绿色,我是静态方法"
return color
print(Car.color())
2.2.6 方法继承
方法是可以继承的,好比儿子继承了父亲的财产一样,那么可以随意使用父亲的财产,A类如果继承了B类,那么同样的A类可以使用B类的所有方法、对象:
class Car:
def driver(self):
print("开车")
def stop(self):
print("停车")
"""
继承
Car:父类
SuperCar:子类
子类可以使用父类所有的属性和方法
"""
class SuperCar(Car):
"""所有Car的属性和行为,SuperCar全部继承"""
pass
Ferrari = SuperCar()
Ferrari.driver()
2.2.7 方法重写
当子类和父类用同名方法时,优先使用自己的,我们把这种方式称之为重写:
class Car:
def driver(self):
print("开车")
def stop(self):
print("停车")
"""
继承
Car:父类
SuperCar:子类
子类可以使用父类所有的属性和方法
"""
class SuperCar(Car):
"""所有Car的属性和行为,SuperCar全部继承"""
def driver(self):
print("跑车开起来飞快")
Ferrari = SuperCar()
Ferrari.driver()
2.2.8 超级重写
当子类和父类用同名方法时,优先会使用自身的,我们也可以拥有自身的,同时拥有父类的,这种情况我们称之为超级重写:
class Car:
def driver(self):
print("开车")
def stop(self):
print("停车")
"""
继承
Car:父类
SuperCar:子类
子类可以使用父类所有的属性和方法
"""
class SuperCar(Car):
"""所有Car的属性和行为,SuperCar全部继承"""
def driver(self):
"""超级重写,super()代表父类"""
super().driver()
print("跑车开起来飞快")
Ferrari = SuperCar()
Ferrari.driver()
2.3 对象初始化与实例属性讲解
2.3.1 对象初始化
一个对象从无到有就是一个生产过程,生产后得到一个对象,我们把这种情况称之为对象的初始化,而初始化后的对象会自动调用类下面的魔法函数 init,我们在打印对象时执行了魔法函数中的代码段,函数中的self是代表一个对象产生之前的标记,而产生之后如下代码所示就赋值给了object1:
class Car:
tyre_number = 4 # 车轮个数
def __init__(self):
print("I love you")
object1 = Car() # 我们把Car()的产生称之为对象初始化
print(object1)
init函数与普通的函数不同,init函数不能有返回值,默认为None不可为其他,否则会报错:
class Car:
wheel = True
def __init__(self):
self.wheel = True
return "a"
print(Car().wheel)
2.3.2 类属性与实例属性
首先要明确一个概念,实例属性就是对象属性,对象就是实例,实例属性表示这个成员,物体个人具备的属性、特有属性,而类属性是共有属性,大家都有的特征。
一个实例属性是这样的:
class Car:
tyre_number = 4 # 类属性
def __init__(self):
"""实例属性,self.对象属性"""
self.color = "红色" # 实例属性
self.price = "190w"
如果类属性和实例属性的名字相同,那么实例属性会优先使用自己的,我们也可以使用位置参数的方式,来提高便捷性:
class Car:
tyre_number = 4 # 车轮个数
def __init__(self, car_color, car_price):
"""实例属性,self.对象属性"""
self.color = car_color
self.price = car_price
my_car = Car("黄金色", "3500w")
print(f"这台车的颜色是{my_car.color}")
print(f"这台车的价格是{my_car.price}")
2.4 对象赋值
对象与类不同,对象的赋值是不相等的,而类的赋值是相等的,如下代码所示,类赋值给了3个变量,是完全相同的内存地址,证明这3个变量都代表同1个类,但对象赋值均是在不同的内存地址,故此可以得知对象所赋值的三个变量均是不同的对象:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
得知对象所赋值的三个变量均是不同的对象:
[外链图片转存中…(img-dxDV9Hjt-1715064850403)]
[外链图片转存中…(img-GHYSqGi7-1715064850404)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!