2022年5月21日学习笔记
Python学习笔记 第九章 类一、创建和使用类二、使用类和实例三、继承四、导入模块五、Python标准库六、注
一、创建和使用类
1、类和函数的区别
类(class):类是面向你对象的,class可以保存一此属性的状态,同时也起到模板的作用,把一些通用的东西写进类定义中,也就是在’init’中。class有点像是将多个函数进行功能性封装
函数:函数更像是面向过程编程,更易理解,但是当系统较大时,重复性就会增多。
使用class Name() 来创建一个Name类,类中包含许多方法(函数),根据类来创建实例XingMing = Name(),实例可以用句点表示法调用类中的方法。
一个类包含了一系列实例的通性,众多根据类创建的实例可以使用句点表示法调用类中的方法。
2、创建Dog类class Dog(): def __init__(self,name,age): self.name = name self.age = age def sit(self): print(self.name.title() + " is now sitting.") def roll_over(self): print(self.name.title() + " rolled over!") my_dog = Dog("willie", 6) print("My dog"s name is " + my_dog.name.title() + ".") print("My dog is " + str(my_dog.age) + " years old.") my_dog.sit() my_dog.roll_over() 输出结果为: My dog"s name is Willie. My dog is 6 years old. Willie is now sitting. Willie rolled over!在Python中,首字母大写的名称指的是类,因为要从空白创建这个类,所以类定义中的括号是空的。 _ init _ ()是类中的默认方法,每次根据类创建实例时,Python都会自动运行它。 形参self必不可少,Python调用_ init _()方法来创建实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。 创建Dog实例时,Python将diaoyongDog类的方法_ init _(),通过实参向Dog()传递名字和年龄;self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name和age)提供值。 以self为前缀的变量都可供类中的所有方法使用,可以通过类的任何实例来访问这些变量。 像self.name、self.age这样可以通过实例访问的变量称为属性。 属性参数传递给_ init _,使用self.属性来给实例赋予属性。 访问属性 :my_dog.name,Python先找到实例my_dog,再查找与这个实例相关联的属性。 调用方法 :my_dog.sit()。 创建实例后,以实例名替代self,如my_dog.name相当于self.name。 class People(): def __init__(self, name, age, weight): self.name = name self.age = age self.weight = weight def walk(self): print(self.name.title() + " is now walking on the road.") def die(self): print(self.name.title() + ""s weight is " + str(self.weight) + " when he was sent to the crematorium.") zhang = People("Zhang San", 18, 200) print(zhang.name.title() + " is " + str(zhang.age) + " years old.") zhang.walk() zhang.die() 输出结果为: Zhang San is 18 years old. Zhang San is now walking on the road. Zhang San"s weight is 200 when he was sent to the crematorium.二、使用类和实例
1、Car类 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() my_new_car = Car("audi", "a4", 2016) print(my_new_car.get_descriptive_name()) 输出结果为: 2016 Audi A4.
2、给属性指定默认值 直接在方法中创建一个变量,并赋予初始默认值 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 0 #赋予默认值0 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") my_new_car = Car("audi", "a4", 2016) print(my_new_car.get_descriptive_name()) my_new_car.read_odometer() 输出结果为: 2016 Audi A4. This car has 0 miles on it.也可像给形参赋予默认值一样:(更易理解) class Car(): def __init__(self,make,model,year,odometer_reading=0): self.make = make self.model = model self.year = year self.odometer_reading = odometer_reading def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") my_new_car = Car("audi", "a4", 2016) print(my_new_car.get_descriptive_name()) my_new_car.read_odometer() 输出结果: 2016 Audi A4. This car has 0 miles on it.
3、直接修改属性的值 可在类外直接对该变量进行赋值,此时Python会使用新赋予的值而非默认值 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 0 #赋予默认值0 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") my_new_car = Car("audi", "a4", 2016) my_new_car.odometer_reading = 23 print(my_new_car.get_descriptive_name()) my_new_car.read_odometer() 输出结果为: 2016 Audi A4. This car has 23 miles on it.也可在定义实例时直接传入实参 class Car(): def __init__(self,make,model,year,odometer_reading=0): self.make = make self.model = model self.year = year self.odometer_reading = odometer_reading def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") my_new_car = Car("audi", "a4", 2016,23) print(my_new_car.get_descriptive_name()) my_new_car.read_odometer() 输出结果为: 2016 Audi A4. This car has 23 miles on it.通过方法修改属性的值 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") my_new_car = Car("audi", "a4", 2016) my_new_car.update_odometer(5) print(my_new_car.get_descriptive_name()) my_new_car.read_odometer() 输出结果为: You can"t roll back an odometer! 2016 Audi A4. This car has 10 miles on it.通过方法对属性的值进行递增 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") def increment_odometer(self,miles): if miles >= 0: self.odometer_reading +=miles else: print("You can"t roll back an odometer!") my_used_car = Car("audi", "a4", 2016) print(my_used_car.get_descriptive_name()) my_used_car.update_odometer(23500) my_used_car.read_odometer() my_used_car.increment_odometer(100) my_used_car.read_odometer() 输出结果为: 2016 Audi A4. This car has 23500 miles on it. This car has 23600 miles on it.三、继承编写类时,并非总要从空白开始,若要编写的类时另一个线现成类的特殊版本,可使用继承。 一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,原有的类称为父类,而新类称为子类。 子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。 继承:类括号非空白,使用super()函数关联父子类。
1、子类的方法_ init _() 创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") def increment_odometer(self,miles): if miles >= 0: self.odometer_reading +=miles else: print("You can"t roll back an odometer!") class ElectricCar(Car): def __init__(self,make,model,year): super().__init__(make, model, year) my_tesla = ElectricCar("tesla","model s",2016) print(my_tesla.get_descriptive_name()) 输出结果为: 2016 Tesla Model S.创建子类时,父类必须包含在当前文件中,且位于子类前面。 定义子类时,必须在括号内指定父类的名称:ElectricCar(Car)。 super()是一个特殊函数,帮助Python将父类与子类关联起来。 super()._ init (make, model, year) 这行代码让Python调用ElectricCar的父类的方法 init _(),让ElectricCar实例包含父类的所有属性,父类也成为超类(superclass)。
2、给子类定义属性和方法 让一个类继承另一类后,可添加区分子类和父类所需的新属性和方法。 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") def increment_odometer(self,miles): if miles >= 0: self.odometer_reading +=miles else: print("You can"t roll back an odometer!") class ElectricCar(Car): def __init__(self,make,model,year): super().__init__(make, model, year) self.battery_size = 70 def describe_battery(self): print("This car has a " + str(self.battery_size) + "-kwh battery.") my_tesla = ElectricCar("tesla","model s",2016) print(my_tesla.get_descriptive_name()) my_tesla.describe_battery() 输出结果为: 2016 Tesla Model S. This car has a 70-kwh battery.
3、重写父类的方法 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。 可在子类中定义一个与要重写的父类方法同名的方法,这样Python将不会考虑这个父类方法,而只关注在子类中定义的相应方法。 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") def increment_odometer(self,miles): if miles >= 0: self.odometer_reading +=miles else: print("You can"t roll back an odometer!") def fill_gas_tank(self): print("This car doesn"t need a gas tank!") class ElectricCar(Car): def __init__(self,make,model,year): super().__init__(make, model, year) self.battery_size = 70 def describe_battery(self): print("This car has a " + str(self.battery_size) + "-kwh battery.") def fill_gas_tank(self): print("This car doesn"t need a gas tank!") my_tesla = ElectricCar("tesla","model s",2016) print(my_tesla.get_descriptive_name()) my_tesla.describe_battery() my_tesla.fill_gas_tank() 输出结果为: 2016 Tesla Model S. This car has a 70-kwh battery. This car doesn"t need a gas tank!
4、将实例用作属性 将一个大型类拆分成多个协同工作的小类,并将这些小类的实例用作其他类的一个属性。 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") def increment_odometer(self,miles): if miles >= 0: self.odometer_reading +=miles else: print("You can"t roll back an odometer!") def fill_gas_tank(self): print("This car doesn"t need a gas tank!") class Battery(): def __init__(self,battery_size=70): self.battery_size = battery_size def describe_battery(self): print("This car has a " + str(self.battery_size) + "-kwh battery.") class ElectricCar(Car): def __init__(self,make,model,year): super().__init__(make, model, year) self.battery = Battery() def fill_gas_tank(self): print("This car doesn"t need a gas tank!") my_tesla = ElectricCar("tesla","model s",2016) print(my_tesla.get_descriptive_name()) my_tesla.fill_gas_tank() my_tesla.battery.describe_battery() 输出结果为: 2016 Tesla Model S. This car doesn"t need a gas tank! This car has a 70-kwh battery.在其他类中使用实例作为属性:self.类,然后再定义实例时:name.类.function即可。 slef.battery让Python创建一个新的Battery实例(由于没有指定尺寸,因此为默认值70),并将该实例存储在属性self.battery中。 每当方法_ init _()被调用时,都将执行该操作;因此现在每个ElectricCar实例都包含一个自动创建的Battery实例。 my_tesla.battery.describe_battery()让Python在实例my_tesla中查找属性battery,并对存储在该属性中的Battery实例调用方法describe_battery()。
5、根据电池容量修改续航里程 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 10 #赋予默认值10 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make +" " + self.model + "." return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self,mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can"t roll back an odometer!") def increment_odometer(self,miles): if miles >= 0: self.odometer_reading +=miles else: print("You can"t roll back an odometer!") def fill_gas_tank(self): print("This car doesn"t need a gas tank!") class Battery(): def __init__(self,battery_size=70): self.battery_size = battery_size def describe_battery(self): print("This car has a " + str(self.battery_size) + "-kwh battery.") def get_range(self): if self.battery_size == 70: range = 240 elif self.battery_size == 85: range = 270 message = "This car can go approximately " + str(range) message +=" miles on a full charge. " print(message) class ElectricCar(Car): def __init__(self,make,model,year): super().__init__(make, model, year) self.battery = Battery() def fill_gas_tank(self): print("This car doesn"t need a gas tank!") my_tesla = ElectricCar("tesla","model s",2016) print(my_tesla.get_descriptive_name()) my_tesla.fill_gas_tank() my_tesla.battery = Battery(85) #修改电池默认值 my_tesla.battery.describe_battery() my_tesla.battery.get_range() 输出结果为: 2016 Tesla Model S. This car doesn"t need a gas tank! This car has a 85-kwh battery. This car can go approximately 270 miles on a full charge.四、导入模块与从其他模块导入函数方法一致 五、Python标准库from collections import OrderedDict favorite_languages = OrderedDict() favorite_languages["jen"] = "python" favorite_languages["sarah"] = "c" favorite_languages["edward"] = "ruby" favorite_languages["phil"] = "python" for name , language in favorite_languages.items(): print(name.title() + ""s favorite language is " + language.title() + ".") 输出结果为: Jen"s favorite language is Python. Sarah"s favorite language is C. Edward"s favorite language is Ruby. Phil"s favorite language is Python.字典能将信息关联起来,但不记录添加键-值对的顺序。 使用collections中的OrderedDict类可以创建字典并记录其中的键-值对的添加顺序。 六、注类名单词首字母大写,不使用下划线;实例名和模块名都采用小写,单词之间加上下划线。 每个类后都应紧定义一个文档字符串简要描述类的功能。 用一个空行分隔方法,用两个空行分隔类。
三星又造了一个巨大的相机传感器,将搭载在VivoX80上三星是全球第二大移动设备摄像头传感器制造商,基本上所有的智能手机品牌都使用过三星的传感器。在过去的几年中,这家韩国科技巨头已经推出了多种大型相机传感器,包括ISOCELLGN1和I
蓝牙技术无线技术小知识蓝牙与WiFi的区别WiFi是一项重要的无线网路通信技术,目前该技术由WiFi联盟所持有,而与之相似的无线通信技术还有蓝牙,即蓝牙技术联盟管理的通信标准。蓝牙与WiFi的区别1工作方式不同WiFi全称
最低仅需2799元骁龙8手机想要性价比就选这三款新一代骁龙8处理器于去年12月1日上市。其采用三星4nm制程工艺,内置八核KryoCPU,包括一个基于CortexX2的3。0GHz超大核,GPU性能相比上一代更是有高达50以上的
打造性能监控平台在做性能测试的时候,你是如何监控被测试系统的硬件资源的,如果是云平台,那么一般提供的有可视化的监控信息,如果是本地服务,只能通过系统命令(如pstoplsof等)查看。我们可以自己
使用三年,华为畅享10S依然是手机界的王者三年前图便宜买的畅享10S,万万没想到三年后依然流畅丝滑,前沿的设计放在今天依然碾压全场。外观使用三年,除了开封那天就没见过手机后盖什么样,现在已经忘了啥样了。前面贴膜后面手机壳,
开源Nginx可视化配置工具,快速搞定Nginx配置难题开源精选是我们分享GithubGitee等开源社区中优质项目的栏目,包括技术学习实用与各种有趣的内容。本期推荐的是一个Nginx界面配置工具nginxWebUI。nginxWebU
留给造车新势力的时间不多了出品虎嗅汽车组作者王笑渔编辑周到头图大空头知乎上有一个浏览量超150万的提问BBA在电动时代会跌落神坛吗?这其中,就有一条高赞的回答给出的判断是新能源时代的BBA是真的离跌落神坛不
互联网工资解读总包100万,实际月薪仅3万互联网是高薪行业,互联网的从业者动不动就号称自己年薪百万,实际到手真的有那么多吗?一位互联网从业者给大家解读了所谓的互联网高薪base近40k,实际30K出头总包100万,实际月薪
怎么选电池?电池怎么选?什么电池耐用?苹果手机怎么选电池?手机用一两年总是为换电池纠结,,到底什么电池好?广告和水军哪个可信?水军难分,广告避重就轻夸大其词,所以你可能买过的几个牌子电池用起来都差不多,就常常会陷入误区,第三方电池都不怎么
两款旗舰级综合性能强悍的手机配置解读大多数读者在看手机配置参数解读时,并不会像看小说一样内容精彩生动,甚至是在看各项参数数据解读时会生涩难懂枯燥乏味。虽然看小说可以愉悦心情,但是读懂手机配置解读,不仅能了解到最新的高
国内首款!大算力自动驾驶芯片华山二号A1000已投入量产本报记者郑馨悦4月25日,证券日报记者从自动驾驶芯片公司黑芝麻智能获悉,公司研发的华山二号A1000自动驾驶计算芯片已完成全部量产认证,预计年内量产上车,实现L2L3级别自动驾驶功