day23:类的命名空间和组合

1,类属性:静态属性,方法:动态属性;双下init方法,每当我们调用类的时候就会自动的触发这个方法,默认传self,在init方法里面可以对self赋值;在类的内部,self就是一个对象,我们自己实例化的对象是类外部的对象

2,Python入门,给你一个需求,能翻译成Python语言,就入门了;面向对象入门,当你见到一个需求,能分析出这个问题是否适合用面向对象解决,如果适合,能有一些想法,怎么设计这个类,有几个属性,方法等等

3,一定要选好最适合的编程方式,不是所有的都适合用面向对象来解决的,面向对象只是一种编程思想,并没有高端低端之分。

4,是否可以用对象名来调用静态属性呢?可以的

5,类中的函数名和对象,最终都是一个名字而已,都是一个内存地址。定义了一个类以后,会创建一个这个类名的命名空间,在这个空间内,放名字

6,有了对象一定可以找到类(类对象指针),有了类找不到对象,单线联系,对象自己的空间里面没有的时候,回去类的空间里面找

class Course:

    language = 'Chinese'
    def __init__(self,teacher,course_name,period,price):
        self.teacher = teacher
        self.name = course_name
        self.period = period
        self.price = price

    def func(self):
        pass

linux = Course('lisa','linux',6,20000)
linux.language = "japanese"   # 这个是给对象新添加了一个属性

print(linux.__dict__)
del linux.language #删除这个属性 Course.language
= 'English' # 这个是修改了雷属性 print(Course.__dict__) # {'teacher': 'lisa', 'name': 'linux', 'period': 6, 'price': 20000, 'language': 'japanese'} # {'__module__': '__main__', 'lan

7,对于静态属性不可变数据类型来说,类变量最后用类名来操作,用对象来操作的话,只不过给对象添加了新的属性;对于可变数据类型,可以用对象和类的索引来操作

8,绑定方法,这个对象提供的所有的数据,这个方法都可以去调用了,这种情况下,才产生了绑定方法。绑定的意思其实就是把这个对象当做self传进去了,也有非绑定方法,目前我们还没有见到。

def func():pass

class Foo():
    def func(self):
        print('func')

f1 = Foo()

# 打印内存地址
print(func)
print(Foo.func)
print(f1.func)
print(f1)

# <function func at 0x103bfa840>
# <function Foo.func at 0x103bfa6a8>
# <bound method Foo.func of <__main__.Foo object at 0x103b2f390>>
# <__main__.Foo object at 0x1044ac390>
# 这个函数是这个类的绑定方法

9,对象找名字的时候,如果类里面没有,是不可以找全局的的,最高找到类。类里面就是一个独立的,他不能一级一级网上找了

10,import一个包,相当于类的实例化过程,后面的点调用,类似于对象访问方法,访问属性。

11,类的特性:面向对象的三大特性:继承,多态和封装

12,一种类里面的用法,组合,这个我们其实一直在用,只不过不知道他就叫做组合。

猜你喜欢

转载自www.cnblogs.com/lisa-blog/p/10206314.html