哲♂学——万物皆对象 everything is object

哲♂学——万物皆对象 everything is object

1.万物皆对象

2.对象皆有类型

3.程序由一堆对象组成,对象间通过发送消息协同工作

4.每个对象都有自己的存储空间,并由其他对象构成

5.相同类型的对象可以接受相同类型的消息

函数是对象

def foo(x):
    'function foo'
    return x*x
func =foo
print(type(foo),foo)
print(foo.__doc__)
print(func(2))
<class 'function'> <function foo at 0x0000025B779C4558>
function foo
4

类是对象 (当然,类也可以实例化为对象)

通俗的讲,人是对象,人这个概念也是对象

class A:
    'class A'
    def __init__(self):
        print('A is init')
    def method1(self):
        print('method 1 ok')
print(type(A),A)
print(A.__doc__)
A2 =A
a2 = A2()
a2.method1()
<class 'type'> <class '__main__.A'>
class A
A is init
method 1 ok

类属性&实例属性

类属性是“类class”作为一个对象所有的。 Tomato.objectCount
这个属性不是类对象(下文的T1,T2)的属性,而是类Tomato的属性。

实例属性是某个类下面每个对象各自拥有的T1.objectCount
当访问T1.objectCount,没有实例属性,将寻找所属类属性Tomato.objectCount

def smile():
没有self此函数不依赖对象,和具体哪一个西红柿没关系
由于这个smile不依赖对象,可以视为一种类。
但注意和真正类的区别。这个smile只是Tomato的smile,前面加了一个前缀,大大提可读性

class Tomato:
    objectCount = 0#类属性。这个属性不是类对象(下文的T1,T2)的属性,而是类Tomato的属性,有且仅有一个
    def smile():
    #没有self,此函数不依赖对象,和具体哪一个西红柿没关系
    #这个smile不依赖对象,可以视为一种类。但注意和真正类的区别。这个smile只是Tomato的smile,前面加了一个前缀,大大提高程序的可读性
        print('tomato.smile(): without self parameter.')
    def __init__(self):
        Tomato.objectCount += 1#这是给Tomato这个类加属性
        #self.nbjectCount = 1是给具体的西红柿对象加属性
        a = self.objectCount #self一个实例对象没有objectCount属性,自动寻找类属性
        self.objectCount = 3 #此时实例对象将真正创建自己的实例属性

Tomato.smile()#没有对象,Tomato只是类
T1 = Tomato()
T2 = Tomato()
print('Tomato.objectCount:',Tomato.objectCount)
print('T1.objectCount:',T1.objectCount)#T1没有objectCount属性,自动寻找所属类的属性objectCount
tomato.smile(): without self parameter.
Tomato.objectCount: 2
T1.objectCount: 3
发布了8 篇原创文章 · 获赞 0 · 访问量 21

猜你喜欢

转载自blog.csdn.net/weixin_44827144/article/details/105571743