OOP object基类

低调的基类--object

  Python中一切皆为对象,类也不例外,类也是一个对象。

       object是所有类的基类。

 

世界上最简单的类

# -*- ecoding: utf-8 -*-
# @ModuleName: samplest_demo
# @Function: 
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

class A:
    pass
print(A.__class__) #output:<class type>
print(A.__class__.__base__) #output: <class object>

 

 

  每个Python类的定义都会隐式的集成来自object类,类定义就是对type类的一个对象的声明,基类(父类)为object。

         派生自object类中的对象方法,也将继承各自相应的默认实现。某些情况下,基类中一些特殊方法的默认行为,也正是我们想要的。

 

基类中的__init__()

  object最为所有类的基类,已经为__init__方法提供了默认的实现,一般情况下不需要重写这个函数。如果没有对它进行重写,那么在创建对象时不会产生其他变量的实例。

    从下面的例子可以看出超级基类已经实现了__init__()方法。

   

# -*- ecoding: utf-8 -*-
# @ModuleName: samplest_demo
# @Function: 
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

print(dir(object))
#output:[‘__class__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘]

  

 延迟赋值

e.g:

# -*- ecoding: utf-8 -*-
# @ModuleName: samplest_demo
# @Function: 
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

class Study:
    def get_knowledge(self):
        return self.learn_time * self.learn_efficiency

s = Study()
s.learn_time, s.learn_efficiency = 3, 2
print(s.get_knowledge()) #output :6

 

 

定义在类Study中的函数get_knowlede在返回值时使用了两个属性,可是没有在任何地方对其进行赋值,但是在Python这是允许的。

但是这样的做法,给调用者带来了潜在的困惑,因此要尽量避免。

 

易错问题

下面来看一个初学者经常出错的问题:

从这里可以看出类中的“self是类实例化产生的对象本身的指代,而不能指代此类本身”

# @ModuleName: samplest_demo
# @Function:
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

class Study:
    def get_knowledge(self):
        return self.learn_time * self.learn_efficiency

s = Study
s.learn_time, s.learn_efficiency = 3, 2
print(s.get_knowledge()) #output :TypeError: get_knowledge() missing 1 required positional argument: self

 

OOP object基类

上一篇:启明云端分享:点击浏览超详细简洁的86盒介绍


下一篇:js获得当前时区夏令时发生和终止的时间