python-关于类的几点基础知识

以下都是基于python3.x

类继承的时候写不写object,是一样的。一样的。一样的

看例子看例子:

>>> class NoObject():
...     pass
...
>>> class FromObject(object):
...     pass
...     
>>> no_object = NoObject()
>>> from_object = FromObject()
>>> type(no_object)
<class 'NoObject'>
>>> type(from_object)
<class 'FromObject'>

python3的类都已经隐式继承了object,所以,python3中写不写继承object都是没有区别的。

类变量、实例变量

类变量:定义在类的定义之。例如:

class A:
    class_variable = "I am class variable"

实例变量:以self.开头,在构造函数中常见。例如:

class A:
    def __init__(self, a):
        self.instance_variable = a

    def print_a(self):
        print(self.instance_variable)

实例和类都可以访问类变量,可以通过类名访问,也可以通过实例名访问。实例变量只能通过实例访问。例如:

class A:
    class_variable = "I am class variable"  # 类变量

    def __init__(self, a):
        self.instance_variable = a  # 实例变量

    def print_a(self):
        print("I am {}".format(self.instance_variable))


a = A("instance_variable")
print("Use class: class variable is {}".format(A.class_variable))  # Use class: class variable is I am class variable
print("Use instance: class variable is {}".format(a.class_variable))  # Use instance: class variable is I am class variable
a.print_a()  # I am instance_variable
A.print_a()  # 报错
A.print_a(a)  # I am instance_variable

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

类方法:第一个参数是cls(类本身),操作对象是类变量,可以使用@classmethod声明。
实例方法:第一个参数是self(实例),操作对象是实例变量。
静态方法:参数是传入的,操作对象是传入的参数,可以使用@staticmethod声明。
看例子:

class A:
    name = "class_variable"  # 类变量

    # 构造函数
    def __init__(self, a):
        self.a = a  # 静态变量

    # 类方法
    @classmethod
    def class_method(cls):
        print("I am class method")
        print("my class variable is {}".format(cls.name))

    # 实例方法
    def instance_method(self):
        print("I am instance method")
        print("my a is {}".format(self.a))

    # 静态方法
    @staticmethod
    def static_method(a, b):
        print("I am static method")
        print("my a and b is {}, {}".format(a, b))


print("class variable name is {}".format(A.name))  # class variable name is class_variable  通过类访问类变量
A.class_method()  # I am class method  类调用类方法
A.instance_method()  # 类调用实例方法报错 没有传入实例
instance_a = A("a")
A.instance_method(instance_a)  # I am instance method 类传入实例调用实例方法
A.static_method("class_a", "class_b")  # my a and b is class_a, class_b 类调用静态方法

instance_a = A("a")
print("class variable name is {}".format(instance_a.name))  # class variable name is class_variable 通过实例访问类变量
instance_a.class_method()  # I am class method  实例调用类方法
instance_a.instance_method()  # I am instance method 实例调用实例方法
instance_a.static_method("instance_a", "instance_b")  # my a and b is instance_a, instance_b 实例调用静态方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值