Python自学第十二天——类与对象

作为新手自学Python的第十二天,技术低微,希望可以通过这种方式督促自己学习。

个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)

———————————————————————————————————————————

编程两大思想

面向过程:事物简单,可以用线性思维解决

面向对象:事物比较复杂,线性思维可能无法快速解决

共同点:都是解决实际问题的一种思维方式

二者相辅相成并不对立,在解决复杂问题时,面向对象方式便于我们宏观上把握事物之间的复杂关系,方便我们整体分析;微观操作扔需要使用面向过程方式来解决

1、类与对象

1.1 类

类是多个类似事物组成的群体的统称,能够帮助我们快速理解和判断事物的性质。

1.2 数据类型

不同的数据类型属于不同的类

使用内置函数type()查看数据类型

1.3 对象

相同类型下的不同个例,这些个例就是实例或对象

print(type(100))    # <class 'int'>
print(type(99))     # <class 'int'>
# 100、99就是对象,数据类型为int

1.4 类的创建

1.4.1 语法

class Student :

pass

1.4.2 类的组成

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

class Student:  # Student为类的名称(类名)由一个或多个单词组成,每个单词的首字母大写,其余字母小写
    native_pace = '甘肃'  # # 直接写在类里面的变量成为类属性
​
    def __init__(self, name, age):  # 初始化方法
        self.name = name  # self.name 称为实例属性,此时进行一个赋值操作,将局部变量的name值赋给实例属性
        self.age = age
​
    # 实例方法      类之外定义的为函数,类之内定义的为方法
    def eat(self):
        print('牛肉面!')
​
    # 静态方法,规定不允许写self
    @staticmethod
    def method():
        print('我使用了staticmethod进行修饰,我是静态方法')
​
    # 类方法
    @classmethod
    def cm(cls):
        print("我使用了classmethod进行修饰,我是类方法")

1.5 对象的创建

1.5.1 语法

实例名 = 类名 ()

1.5.2 意义

有了实例,就可以调用类中的内容

# 创建Student类的对象
stu1 = Student('张三', 20)
# print(stu1)     # <__main__.Student object at 0x0000022657301D60> ,此时输出的是类的十六进制内存地址
stu1.eat()          # 对象名.方法名()
print(stu1.name)
print(stu1.age)
​
Student.eat(stu1)   # 类名.方法名(类的对象) 此时类的对象实际上为方法定义处的self
# 与stu1.eat()代码功能相同,均为调用Student中的eat方法

1.6 类属性、类方法、静态方法、实例方法

类属性:类中方法外的变量称为类属性,被该类的所有对象所共享

# 类属性的调用
print(Student.native_pace)
stu1 = Student('张三', 20)
stu2 = Student('李四', 30)
print(stu1.native_pace)
print(stu2.native_pace)
Student.native_pace = '四川'
print(stu1.native_pace)
print(stu2.native_pace)
"""
结果为:
甘肃
甘肃
甘肃
四川
四川
"""

类方法:使用@classmethod修饰的方法,使用类名直接访问的方法。类方法最少包含一个参数,通常命名为cls,Python会自动将累本身绑定给cls参数,即我们在调用类方法时无需显式为cls传递参数。

静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法。静态方法就是函数。静态方法没有cls、self这样的特殊参数,Python解释器不会对它包含的参数做任何类或对象的绑定,因此类的静态方法中无法调用任何类属性和类方法。

静态方法和函数的区别:

静态方法函数
定义在类空间之内(类命名空间)定义在程序所在的空间之内(全局命名空间)

实例方法:在类中定义的方法默认为实例方法。实例方法最少也要包含一个self参数,用于绑定调用此方法的实例对象。

静态方法只能调用类的静态属性,类方法只能调用类的静态方法和静态属性

实例方法的self指的是实例对象,类方法的self指的是类的元数据(类的自身)

# 类方法的使用
Student.cm()
​
# 静态方法的使用
Student.method()
"""
结果为:
我使用了classmethod进行修饰,我是类方法
我使用了staticmethod进行修饰,我是静态方法
"""

1.7 动态绑定属性和方法

Python在创建对象之后可以动态地绑定属性和方法

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
​
    def eat(self):
        print(self.name+'在吃饭')
​
​
stu1 = Student('张三', 20)
stu2 = Student('李四', 30)
# 为stu2动态绑定性别属性
stu2.gender = '女'
print(stu1.name, stu1.age)
print(stu2.name, stu2.age, stu2.gender)
​
# 为stu1动态绑定方法
stu1.eat()
stu2.eat()
​
​
def show():
    print('定义在类之外的为函数')
​
​
stu1.show = show
stu1.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wei730050

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值