python基础笔记11—类与对象

定义

类:不同的数据类型属于不同的类,也称为类对象
对象:类下包含的一个具体的内容

类的创建

class Student :#Student为类名
		pass

类名:可由1个或多个单词组成,每个单词的首字母大写,其余小写

  • 类的组成
  1. 类属性:直接写在类里的变量
  2. 实例方法:在类内定义的函数,使用self(self表示类的实例)
  3. 静态方法:使用staticmethod进行修饰的、在类内定义的函数(不能使用self
  4. 类方法:使用了classmethod进行修饰的、在类内定义的函数,使用cls
class Student:         #Student为类名
    native_place='吉林'#native_place为类属性(类内的一个对象)

    #初始化方法
    def __init__(self,name,age):
        self.name=name#赋值操作,把局部变量name赋给了实例属性self.name
        self.age=age

    # 实例方法(相当于在类外定义的函数)
    def eat(self):
        print('你好')

    # 静态方法
    @staticmethod
    def method():
        print('我使用了staticmethod进行修饰,所以是静态方法')

    # 类方法
    @classmethod
    def cm(cls):
        print('我使用了classmethod进行修饰,所以是类方法')

类对象的创建(类的实例化)

把类对象视为是返回该类的一个新实例的不带参数的函数
创建类的实例:

实例名=类名()
  • 调用类中的内容:
  1. 对象名.方法名()
  2. 类名.方法名(类的对象)
stu1=Student('张三',20)#前面类的创建中,init方法中有2个参数,stu1是类的一个实例
stu1.eat()    #对象名.方法名()
#与stu1.eat()相同,都是调用Student类中的eat方法
Student.eat(stu1)    #类名.方法名(类的对象)——>实际上是类中方法定义处的self

类属性、 类方法、静态方法

  • 类属性:
    类中定义在方法外的变量,被该类的所有对象所共享(类内的全局变量)
    使用方式:
类名.类属性

绑定在实例上的属性不会影响其他实例,但类本身也是一个对象,如果在类上绑定属性,则所有实例都可以访问该类的属性,并且所有实例访问的类属性都是同一个!!!记住,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

print(Student.native_place) #吉林,输出的是类中类属性native_place的值
stu1=Student('张三',20)#吉林
stu2=Student('李四',22)#吉林
print(stu1.native_place)
print(stu2.native_place)
Student.native_place='天津'#通过类名修改类属性,所有实例的类属性被改变
print(stu1.native_place)#天津
print(stu2.native_place)#天津
  • 类方法:
    使用了classmethod进行修饰的、在类内定义的函数,使用cls
    使用类名直接访问的方法
    调用方式:类名.方法名()
  • 静态方法:
    使用staticmethod进行修饰的、在类内定义的函数
    使用类名直接访问的方法
    调用方式:类名.方法名()
Student.cm()#调用类方法
Student.method()#调用静态方法

动态绑定属性和方法

python是动态语言,在创建对象之后,可以动态地绑定属性和方法
一个类对象可以创建这个类的N多个实例对象,每个实例对象的属性值可以不同。

  • 动态绑定属性:创建一个实例对象后,在类外为特定实例对象添加一个属性。
    例:在Student类中,为实例stu1增加属性性别,指定为‘女’
class Student:  #Student为类名
    native_place='吉林'#native_place为类属性

    #初始化方法
    def __init__(self,name,age):
        self.name=name#赋值操作,把局部变量name赋给了实例属性self.name
        self.age=age
    # 实例方法(相当于在类外定义的函数)
    def eat(self):
        print(self.name+'在吃饭')

stu1=Student('张三',20)
stu2=Student('李四',23)
print(id(stu1))
print(id(stu2))
print('-------为stu1动态绑定性别-------------')
stu1.gender='女'#动态绑定性别
print(stu1.name,stu1.age,stu1.gender)
  • 动态绑定方法
def show():
    print('定义在类之外,称为函数')
stu1.show=show#将show方法绑定在实例stu1上
stu1.show()
#stu2.show()   报错,因为stu2没有绑定show方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值