类的定义

类是用来描述具有相同的属性和方法的对象的集合。
例如:具有颜色,使用年限,品牌的车,可以归为车类。

创建一个类

Python 中定义一个类使用 class 关键字实现,其基本语法格式如下:

class <类名><类体>

在 <类体> 中一般可以包含以下三个部分:

  • 类的说明文档
    我们也可以为类定义说明文档,其要放到<类名>之后,<类体>之前的位置
  • 属性
    属性,即变量
  • 方法
    方法,即函数

注意:在类中,<类体> 部分并不是必要存在的,类属性和类方法也没有固定的前后顺序。当我们要建立一个空的类时,可以用pass来代替 <语句> 部分

创建一个示例类:

class chair:
    '''这是一个椅子的类'''  #文档说明
    
    #类属性
    color = "绿色"
    foot = 4
    
    #类方法
    def sit(self):
        print("能坐")

构造函数__init__

构造函数__init__在实例化时会将实例属性,自动初始化。
个人理解:init就是一个函数,具有形参,函数体等结构,与实例方法结构没有什么区别。其作用是将类中实例方法需要用到的属性,在实例化时统一先进行定义。

说明:构造方法的运行先于一切类或实例的方法,其定义的实例属性,可以被其后的方法直接调用

示例:

# 创建一个包含init函数的类
'''
__init__函数后面的self,color,shape为函数的形参
'''
def __init__(self,color,shape="方形"):

'''self.color,self.shape是实例属性,在实例化时,将init函数的实参值,赋予实例属性。 '''
    self.color=color
    self.shape=shape
    self.weight=5
    print()

在上面这个案例里,构造函数部分,出现了init函数的三种初始化参数。

  • color :这是最常用的形参,在初始化后,将值赋予对应的实例属性。
  • shape:在函数定义时,给形参赋予了默认值,初始化后,将默认值赋予实例属性。
  • self.weight:这是个特殊的实例属性,由于它是在init函数体中定义的默认值,所以不能出现在形参位置。

self参数

self参数的本质就是个形参,用于传入实例本身。

无论是在构造方法,还是实例方法中,self参数都是必须存在的,且要位于所以参数的第一位。同时,self在Python中并不是关键字,即可以用其他符合标识符规则的字符替代。

比如将上面的chair类中的self换成name也是可以的。

# 创建一个包含init函数的类
class chair:
    '''这是一个椅子的类'''  #文档说明
    
#类变量
    foot = 4
    
#构造函数
    def __init__(name,color,shape="方形"):
        name.color=color
        name.shape=shape
        name.weight=5
        print()
    
#类方法
    def sit():
        print("{}条腿的椅子能坐".format(chair.foot))
    
#实例方法
    def describe(name,school):
        name.school=school
        
        print("这把椅子属于{},有{}条腿,颜色是{},形状是{},重量{}kg。".format(name.school,name.foot,name.color,name.shape,name.weight))

类体中各部分名称

  • 类属性
    类属性的作用域是整个类,即该属性是整个类共有的,在不同实例中均可使用。
'''
创建一个chair类,定义实例t1,t2均为该类,打印t1,t2两个实例的foot值均为4
可以看出类属性foot可以被不同实例调用
'''

class chair:
	#类变量
    foot = 4

t1=chair()
t2=chair()
print(t1.foot)
print(t2.foot)

# 返回
4
4
  • 实例属性
    实例属性的作用域是该实例本身,即该属性为该实例本身所有,在不同实例中,不能相互使用。
    在类体中,实例属性出现在实例方法和构造方法中,一般形式为self.属性名
'''
创建一个chair类,定义实例t1,t2均为该类,调用实例方法w并分别给形参weight赋值5,4
两个实例方法的返回值分别对应了各自的实参,可以看出实例属性仅在自身实例中使用。
'''

class chair:

    
	#方法
    def w(self,weight): 	 #weight是函数w的形参
        self.weight=weight  	#self.weight就是一个实例属性
        print("椅子的重量是",self.weight)

t1=chair()
print(t1.w(5))
t2=chair()
print(t2.w(4))

# 返回
'''
椅子的重量是 5
椅子的重量是 4
'''
  • 类方法
  1. 类方法最明显的标志是不包含参数(self参数也没有),这是一种属于类的方法,只可以包含类属性,在类方法中使用类属性时格式有两种:
    类名.类属性名或使用魔法函数__class__.属性名
  2. 在调用类方法时,要使用**类名.类方法名()**的格式

下面两个类方法的结果是一样的:

#用类名.类属性名
class chair:
    
#类变量
    foot = 4
        
#类方法
    def sit():
        print("{}条腿的椅子能坐".format(chair.foot))
        
chair.sit()   #调用类方法

#魔法函数__class__.属性名
class chair:
    
#类变量
    foot = 4
        
#类方法
    def sit():
        print("{}条腿的椅子能坐".format(__class__.foot))
        
chair.sit()   #调用类方法
  • 实例方法
    实例方法用于表达类的行为,在类中以函数的形式表现。一个类中可以具有不定数量的实例方法。
    在实例方法中不仅可以调用方法本身定义的实例属性,还可以调用构造函数中定义的属性和类属性。

示例如下:

class chair:
    
#类变量
    foot = 4
    
#构造函数
    def __init__(self,color,shape="方形"):
        self.color=color
        self.shape=shape
        self.weight=5
    
#实例方法
    def describe(self,school):
        self.school=school
        
        print("这把椅子属于{},有{}条腿,颜色是{},形状是{},重量{}kg。".format(self.school,self.foot,self.color,self.shape,self.weight))
        
a=chair("黄色")
a.describe("五十七中")

#返回
这把椅子属于五十七中,有4条腿,颜色是黄色,形状是方形,重量5kg。

属性、方法的调用

方法调用:实例名.方法名

# 将chair2实例化后,调用方法describe
class chair2:
   
    def describe(self):
        print("这是一把椅子")

              
a=chair2()
a.describe()

属性调用:

  • 调用类属性:类名.类属性名
    定义好类以后,想要查看类属性,可以直接使用类名.实例名的格式,如果进行了实例化,也可以使用实例名.类属性
class chair:
    
    #类变量
    foot = 4
    school = "南开"

c=chair()
print(c.school)		#实例名.类属性名
print(chair.school)		#类名称.类属性名


# 返回
南开
南开
  • 在实例方法中调用:self.属性名。
    在实例方法中,Python会先在实例属性中进行查找对应的属性名,如果没有会在类属性中进行查找。

在下方案例中可以看到,类属性定义了school=“南开”,同时在方法describe中定义了实例属性self.school,在方法调用self.school时,优先在实例属性里寻找。在方法调用self.foot时,由于实例属性没有进行定义,所以调用了类属性。

class chair:
    
    #类变量
    foot = 4
    school = "南开"
    
    #实例方法
    def describe(self,school):
        self.school=school
        print("这把椅子属于{},有{}条腿".format(self.school,self.foot))

c=chair("绿色")
c.describe("五十七中")
print(c.school)
print(chair.school)

# 返回
这把椅子属于五十七中,有4条腿
五十七中
南开

访问限制

  • 受保护属性
    属性名前加单下划线,如:_name
    受保护属性只能被类本身和实例使用(不知道除了此外还有哪能用)。

  • 私有属性
    属性名前加双下划线,如:_ _name
    私有属性只能被类本身访问,不能被实例访问,但可以通过:“实例名._类名 _ _属性名”访问

示例:

class person():
    # 受保护属性
    _name = '张三'
    
    # 私有属性
    __rname = '法外狂徒'
    
    def __init__(self):
        print(person._name,'的外号是',person.__rname)

t=person()
print(t)
print(t._name)    # 调用受保护属性
print(t._person__rname)    #调用私有属性

# 返回

张三 的外号是 法外狂徒
<__main__.person object at 0x0000000007D73F08>
张三
法外狂徒

类的继承

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值