python 类与对象(基础)学习笔记

2023-12-13 05:29:56

目录

类的创建方式?

_ _init()_ _

代码实现

讲解

给属性指定默认值和修改

指定属性的默认值

修改属性的值

类的继承

给子类定义属性和方法?

导入类

导入单个类

从一个模块中导入多个类

导入整个模块

案列

?导入模块中所有的类

python标准库


类的创建方式?

最基本的创建?

class Student:? ? ? (格式:class 类名:) (类名,人为规定一般为首写字母为大写的英语单词

? ? ? ?native_pace = '类属性'

? ? ? ?def __int__(self,name,age):? ?

? ? ? ? ? ? ? ?self.name = name # self.name 称为实体属性,进行了一个赋值,将name赋给实体属性? ? ? ? ? ? ? ? ?self.age = age # age同上

? ? ? ?def info(self): # 在类以外的地方使用叫做函数,在类中使用叫做实体属性

? ? ? ? ? ? ? ?print('我的名字叫:',self.name,'年龄是:',self.age)

类的组成 类属性、实例方法、静态方法、类方法

_ _init()_ _

方法 __init__(),每个方法都默认包含self,若还存在其他形参,则位于self的后面,在上面下颌骨函数,该函数包含三个形参,self,name,age. self位于其他两个形参的前面,上面函数,同self。name与self。age分别来存储name与age的值。 而sit 与roll两个方法则直接由self参数来直接传递来作为实参,不在另外储存。,因为sit与roll两个方法不需要其他的信息,所以只有self

注意,在python2.7版本中,需要在类的括号中加上object.

代码实现
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)
your_dog=Dog('lucy',3)
print("My dog's name is " + my_dog.name.title()+".")
print("My dog is" + str(my_dog.age) + "years old.")
my_dog.sit()
print("Your dog's name is " + your_dog.name.title()+".")
print("Your dog is" + str(your_dog.age) + "years old.")
your_dog.sit()
讲解

关于实参与形参

实参:顾名思义实际参数(就是我们所输入的数值),通常来讲,我们的形参都会传给形参,通过形参来储存。如

self.name = name ( 我们将输入的值传给self.name ,那么self.name就是形参,而我们所输入的值就是实参。? )

在该函数中,映入了实参Willie与6,与上述方法__init__的形参所对印Willie传给了name,6传给了age. 其次.title()是为了使willie的第一个字母大写。而str(my_dog.age)则是为了将整形6转换成字符串。?

给属性指定默认值和修改
class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0
    def get_describe(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_describe())
my_new_car.read_odometer()
指定属性的默认值

通过形参来引入实参,如:

self.odometer_reading = 0

修改属性的值

1,通过实例直接修改 以上面代码为例,直接加上 my_new_car.odometer_reading = 23

2,通过方法修改属性的值 以上面代码为例,假设我们要修改self.odometer_reading = 0 我们可以增加一个方法来是他改变,如 def update_odometer(self,mileage): self.odometer=mileage 有了这行代码,我们可以通过实参传递给mileage来改变odo的值

3,通过方法对属性的值来进行递增 接着以上述代码为例 我们增加一行代码 def increment_odometer(self,miles): self.odometer_reading += miles 我们不断调用这个方法来实现odo的增加,同理我们也可以让他递减。

类的继承

编写类的时候,并非每个类都要从头开始编写,如果你现在要编写的类是你之前缩写类的特殊版本,就可以使用继承, 一个类继承另一个类的时候,它会自动获得另一个类的所有属性和方法。被继承的类叫做父类,继承的类叫做子类。

class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading = 0
    def get_describe(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):
        self.odometer_reading += miles

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_describe())
首先是Car类的代码。创建子类时,父类必须包含在当前文件中,且位于子类前面。(否则会报错,无法找到父类)
,我们定义了子类ElectricCar。定义子类时,必须在括号内指定父类的名称。方法__init__()
接受创建Car实例所需的信息。
?处的super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用
ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超
类(superclass),名称super因此而得名。
注意,由前面我们知道,在python2,7版本中,我们需要再类的括号里面添加object,与python3相同的是,子类里面是父类的名字,不需要object
给子类定义属性和方法?
1,可以直接在父类里面重写
2,直接在子类里面或父类里面编写新的方法
若在父类里面编写的属性或者方法,子类、父类共同拥有。若在子类里编写方法或者属性,只存在子类,父类无法使用
4,重写父类的方法
如果你觉得父类中的某一属性或者方法不适合子类,那么你可以在子类里编写一个与父类同名称的方法或者属性,
然后通过修改子类的方法或属性来是子类变成你想要的。
5,将实例用作属性
使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多:属性和方法清单以及文
件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来。你可以将大
型类拆分成多个协同工作的小类,然后将这些类当成其他类的属性
导入类
导入单个类

首先将一个类单独放在一个文件中,把这个类当做一个模块,这样就可以在其他稳点,将这个类当做模块来调用。

导入方法:

from 文件名 import 类名

一个模块中存储多个类 虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的 类。就是把多个类放在一个文件中,导入方法同上。

从一个模块中导入多个类

将多个类名一次排列

格式: form 文件名(模块名) import 类名1,类名2

导入整个模块

直接导入文件名,因为导入的是整个模块,所以当要调用模块中的类,需要从模块中简介调用。 格式 模块名.类名

案列

所要导入的模块:

class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading = 0
    def get_describe(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):
        self.odometer_reading += miles


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)
    def upgrade_battery(self):
        if self.battery_size!=85:
            self.battery_size = 85
class ElectricCar(Car):
    def __init__(self,make,model,year):
        super().__init__(make,model,year)
        self.battery = Battery()     # 在这里面Battery作为一个属性与Electric中

导入整个模块,并使用

import car
my_beetle = car.Car('volkswagen','beetle',2016)
print(my_beetle.get_describe())
mu_tesla = car.ElectricCar('tesla','roadster',2016)
print(mu_tesla.get_describe())
?导入模块中所有的类

语法 from module_name import *

不推荐使用这种导入方式,其原因有二。首先,如果只要看一下文件开头的import语句,就 能清楚地知道程序使用了哪些类,将大有裨益;但这种导入方式没有明确地指出你使用了模块中 的哪些类。这种导入方式还可能引发名称方面的困惑。如果你不小心导入了一个与程序文件中其 他东西同名的类,将引发难以诊断的错误。这里之所以介绍这种导入方式,是因为虽然不推荐使 用这种方式,但你可能会在别人编写的代码中见到它。 需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name语法 来访问类。这样做时,虽然文件开头并没有列出用到的所有类,但你清楚地知道在程序的哪些地 方使用了导入的模块;你还避免了导入模块中的每个类可能引发的名称冲突

python标准库

Python标准库是一组模块,安装的Python都包含它。你现在对类的工作原理已有大致的了解, 可以开始使用其他程序员编写好的模块了。可使用标准库中的任何函数和类,为此只需在程序开 头包含一条简单的import语句。

文章来源:https://blog.csdn.net/weixin_74940978/article/details/132733523
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。