Python学习笔记(七)——基于类创建对象

类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。

方法:类中定义的函数。
实例化:根据类来创建对象。就能够使用类的实例。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
局部变量:定义在方法中的变量,只作用于当前实例的类。
继承:允许我们定义继承另一个类的所有方法和属性的类。父类是继承的类,也称为基类。子类是从另一个类继承的类,也称为派生类。

1、创建和使用类
class 关键字创建类
init() 函数:所有类都有一个名为 init() 的函数,它始终在启动类时执行。使用 init() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作。

class Person:
    def __init__(self, name, age): 
        self.name = name  #属性name
        self.age = age    #属性age
    def show(self):     #类中的函数称为方法
        return "Hello!"
p1 = Person("LLL", 21)  #创建对象p1(实例化),可创建多个实例:p2 = Person("CCC",20)
#访问类的方法和属性
print (p1.show())
print(p1.name,p1.age)

输出:
Hello!
LLL 21

按照惯例,第一个参数(形参)的名称为self(换成其他也可),在类的方法中必不可少,还必须位于其他形参的前面。调__init__()方法来创建类实例时,将自动传入实参self。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.height = 0  #设置一个默认值
    def wights(self,wig):  #self指类本身
        self.wight = wig
    def show(self):
        print("name: %s age: %d height: %d wight: %d"%(self.name,self.age,self.height,self.wight))
p1 = Person("LLL", 21) #使用类来创建对象
#访问类的属性和方法
p1.wights(60)     #通过方法修改、设置属性的值
p1.show()
p1.height = 170  #直接修改属性默认值
p1.show()

每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

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

class father:
    def __init__(self, n, y, w):
        self.name = n
        self.year = y
        self.__wight = w   # 私有属性,类外无法访问

    def show0(self):
        print("name: %s year: %d wight: %d" % (self.name, self.year, self.__wight))


class mother:
    def __init__(self, b, s):
        self.bag = b
        self.school = s

    def show(self):
        print("我是妈妈")


class child1(father):  # 单继承
    def __init__(self, n, y, w):
        super().__init__(n, y, w)

    def show1(self):
        print("我是孩子")


class daughter(father, mother):  # 多继承
    def __init__(self, n, y, w, b, s):
        father.__init__(self, n, y, w)
        mother.__init__(self, b, s)
        self.def0 = child1(n, y, w)  # 将类作为属性(将实例用作属性)

    def show(self):  # 重写show方法
        print("我继承了")
        super().show()   # 调用父类被覆盖的方法  python3
    #   super(daughter, self).show() 调用父类被覆盖的方法 python2 在python3中同样可用


c = child1("LL", 20, 120)
c.show0()  # 调用父类方法
d = daughter("CC", 18, 85, "L2", "YC")  # 继承了两个类,就有5个属性
d.show0()  # 调用父类方法
d.def0.show1()  # 调用储存在属性中实例的方法
d.show()   # 调用重写的方法

输出:
name: LL year: 20 wight: 120
name: CC year: 18 wight: 85
我是孩子
我继承了
我是妈妈

若父类中有相同的方法名,而在子类使用时未指定,从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。
私有变量:以两个个下划线开头,不能在类的外部被使用或直接访问。
私有方法:以两个个下划线开头,只能在类的内部调用 ,不能在类的外部调用。
del 语句同样可用来删除类的属性、整个类。
类定义不能为空,但是如果处于某种原因写了无内容的类定义语句,使用 pass 语句来避免错误。

3、导入类
随着不断地给类添加功能,文件可能变得很长,即便妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,可类存储在模块中,然后在主程序中导入所需的模块。
虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的类,在程序文件中导入任意数量的类。
导入方法参见:函数基础

1、 类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
2、对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。
3、可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。
4、需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句。在包含多条import语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值