首页
学习
活动
专区
圈层
工具
发布
30 篇文章

八、python学习笔记-面向对象-类对象

代码语言:javascript
复制
# 通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法
"""类对象
需要知道的是self代指实例,cls代指类,这是python中定义好的规范

变量(字段):
    1、实例变量(普通字段):实例变量属于实例(对象),只在实例(对象)方法被调用
    2、类变量(静态字段):类变量属于类,在内存中只保存一份,当一个类中的多个方法使用相同的变量(字段)使类变量,类变量可以被类和实例(对象)调用
方法:
    1、普通方法:保存在类中,通常由实例(对象)调用,但是可以通过类和实例(对象)访问
    2、静态方法:保存在类中,由类直接调用,self不在是必须的,通过@staticmethod 声明,但是可以传递参数,类似于直接写了一个函数
    3、类方法:保存在类中,由类直接调用

"""
"""变量
1、实例变量:如果对象中保存一些值,执行某个功能时需要使用对象中的值,使用实例变量
2、类变量:不需要任何对象中的值,但是一个或多个方法需要使用的值,使用类变量
"""
class Province:
    country = '中国'  # 类变量

    def __init__(self, name):
        self.name = name    # 对象变量


hebei = Province("河北")
henan = Province("河南")

# 示例1、实例变量只能被实例调用,不能被类调用
print(hebei.name)
print(henan.name)

# 会报错,因为实例变量不能被类调用
# print(Province.name)

# 示例2、类变量可以被类和实例调用
print(hebei.country)
print(henan.country)

# 不会报错,类变量可以直接被类调用
print(Province.country)

"""类的方法
1、普通方法:如果对象中保存一些值,执行某个功能时需要使用对象中的值,使用实例变量
2、静态方法:不需要任何对象中的值,使用静态方法
3、类方法:如果在使用时用到当前类的话,使用类方法
"""


# 示例1、普通方法可以通过类和实例调用
class Foo1:
    def __init__(self):
        print('init')

    def bar(self):  # 必须传参self
        print('method')


# 通过实例调用,创建类的实例foo,创建时会执行构造方法,打印init,然后调用bar方法打印methodo
foo1 = Foo1()
foo1.bar()       # 会自动将实例(foo)传递给self

# 通过类调用,并未执行构造方法,说明没有创建实例,直接调用bar打印hello
# 通过类调用需要传参,因为定义方法时设置了形参self,没有创建实例需要自己传入
Foo1.bar('test')


# 示例2、静态方法,直接被类调用不用self
class Foo2:
    @staticmethod   # 装饰器,声明这个方法是静态方法
    def bar():      # 可以不传递self参数
        print('staticmethod')

    @staticmethod
    def bar2(a1, a2):   # 静态方法可以传参
        print(a1, a2)


# 通过类调用,不需要传参
Foo2.bar()

# 通过类调用,传递参数
Foo2.bar2(1, 2)


# 示例3、类方法
class Foo3:
    @classmethod
    def bar(cls):   # 类方法使用cls而非self,必填.cls代指类,所以不需要实例
        print('classmethod')


Foo3.bar()  # 会自动将类传递给形参cls
下一篇
举报
领券