Python 函数笔记 --类

本文介绍了Python中的面向对象编程概念,包括如何创建类、实例化对象,使用`__init__`方法初始化属性,给属性指定默认值,修改属性值,以及实现类的继承。示例中展示了Dog和Car类的定义,以及如何通过实例方法访问和修改属性。此外,还讨论了类的编码风格和导入类的方式。
摘要由CSDN通过智能技术生成

目录

1.创建类

1.1 什么是类

1.1.1 方法  _ _init_ _() 

1.2  根据类创建实例

2.使用类和实例

2.1 给属性指定默认值

2.2 修改属性的值       

3.继承

4.导入类 

5. 类编码风格


1.创建类

1.1 什么是类

在Python中,首字母大写的名称是类。

1.1.1 方法  _ _init_ _() 

         _ _init_ _() 是一个特殊的方法,每当根据类创建新实例时,Python会自动运行它,在这个方法名称中,开头和末尾都有两个下划线,旨在避免Python默认方法与普通方法发生名称冲突

        _ _init_ _() 中的三个形参self、name、age,形参self必不可少,还必须位于其他参数前面。在Python调用  _ _init_ _() 方法来创建Dog实例时,将自动传入实参 self。每个与类 相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。同时,以self为前缀的变量都可供类中的所有方法使用,我们可以通过类的任何实例来访问这些变量。

#创建 Dog()类
class Dog():
    # 每个与类 相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,
    # 让实例能够访问类中的属性和方法。
    # 以self为前缀的变量都可供类中的所有方法使用
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title() + 'is now sitting.')

    def roll_row(self):
        print(self.name.title() + 'rolled over')

1.2  根据类创建实例

my_dog = Dog('willie',6)                    # 实例
print("My dog is " + my_dog.name.title())   # 用句点表示法访问实例的属性
my_dog.sit()                                # 用句点表示法来调用 Dog 类中定义的任何方法

you_dog = Dog('sdfdf',10)                   # 可根据需求创建多个实例
you_dog.sit()
you_dog.roll_row()

输出:             My dog is Willie
                        Willieis now sitting.
                        Sdfdfis now sitting.
                        Sdfdfrolled over 

2.使用类和实例

2.1 给属性指定默认值

类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。在有些情况下,如设置默认值时,在方法 _ _init_ _() 内指定这种初始值是可行的;如果你对某个属性这样做了,就无需包含为它提供初始值的形参。

class Car():
    def __init__(self):
        self.name = 'hongqi'
        self.id = '10001'
        self.born = '2014'

    def my_print(self):
        full_name = str(self.born) + '\t' + self.name.title() + '\t' +self.id
        return full_name

my_car = Car()
print(my_car.my_print())
my_car.name = 'xueying'
print(my_car.my_print())

2.2 修改属性的值       

对于公有属性直接修改/访问 或间接修改/访问都可以

对于私有属性只能间接修改/访问

# 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,
# 在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
class Car():
    def __init__(self,model,name,id):
        self.model = model
        self.__name = name              # 私有变量
        self.__id = id


    def my_print(self):
        print(self.model,self.__name,self.__id)

    def get_model(self):
        return self.model

    def up_model(self,model):
        self.model = model

    def get_id(self):
        return self.__id

    def up_id(self,id):
        self.__id = id

my_car = Car('fds','fsd','23934')
my_car.my_print()
my_car.model = 'fweg'                   # 外部可以直接修改公有变量属性值
my_car.my_print()
my_car.up_model('koiu')                 # 外部可以通过方法间接修改公有变量属性值
print(my_car.model,my_car.get_model())  # 外部可以直接或间接访问公有变量属性值

my_car.id = '19293'                     # 外部直接修改私有变量属性值,编译器不报错是因为编译器将它和类中的属性看成不同的变量
my_car.my_print()                       # 输出类中属性 id 的值没有发生改变
print(my_car.id,my_car.get_id())        # 外部不能直接修改私有变量属性值
my_car.up_id('9837249')                 # 可以通过间接的方法改变属性的值
my_car.my_print()

输出:     fds fsd 23934
                fweg fsd 23934
                koiu koiu


                koiu fsd 23934
                19293 23934
                koiu fsd 9837249

3.继承

        一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,原有的类称为父类,而新的类称为子类,子类继承父类的所有属性和方法,同时还定义自己的属性和方法。

        创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时必须在括号里指定父类的名字。

class  Animal(object) :
    def run(self):
        print("1Animal is run...")
    def eat(self):
        print("2Animal is eating...")

class Dog(Animal):      # Animal 是 Dog 的父类,Dog 是 animal 的子类
    def run(self):
        print("3dog is run...")

# 当子类和父类都存在相同的run()方法时,子类的run()覆盖了父类的run(),
# 在代码运行的时候,总是会先调用子类的run(),如果子类没有run(),再调用父类。

class Cat(Animal):
    def run(self):
        print("4cat is run...")

def run_eat(Animal):
    Animal.eat()
    Animal.run()

animal = Animal()
run_eat(animal)
run_eat(Dog())
run_eat(Cat())

输出:     2Animal is eating...
                1Animal is run...
                2Animal is eating...
                3dog is run...
                2Animal is eating...
                4cat is run... 

        继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。

        super()函数帮助Python将父类和子类关联起来

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
        self.odomrter_reading = 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.odomrter_reading) + "miles on it")

class Ele_car(Car):
    def __init__(self,make,model,year):
        super().__init__(make,model,year)

my_car = Ele_car('hongqi','modes',3241)
print(my_car.get_descriptive_name())

4.导入类 

导入类类似于导入函数

from  module_name  import  module_class    //  导入单个类

from  module_name  import  module_class1,module_class2,module_class3   // 导入多个类

from  module_name  import  *    // 导入所有类

import  module_name      // 导入整个模块  

5. 类编码风格

类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不是用下划线

实例名和模块名都采用小写格式,并在单词之间加上下划线,对于每个类,都应紧跟在类定义后面包含一个文档字符串,用于简要描述类的功能。

需要同时导入标准库中的模块和自己编写的模块时,先编写导入标准模块的 import 语句,在添加一个空行,编写导入自己编写的 import 语句

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值