Python笔记总结week8

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python笔记总结week8相关的知识,希望对你有一定的参考价值。

面向对象第二节

要点:

1. 封装,对象中嵌套对象

2. pickle,load,切记,一定要先导入相关的类

 

回顾上一节:

面向对象三大特性:

封装、继承、多态(多种类型、多种形态)

关于多态,任意参数的函数有如下特性:

def func(arg):
    print(arg)
func(1)
func("Alex")
func([11,22,33])

关于arg参数:

class A:
    pass
class B(A):
    pass
class C(A):
    pass
#arg参数,必须是A类型或是A的子类类型
def func(A arg):
    print(arg)

#obj = B()
#obj = C()
obj = A()
func(obj)

 

面向对象中类成员

字段:静态字段、普通字段

P.S:静态字段代码加载的时候已经创建

class Foo:
    #字段(静态字段)
    CC = 123
    
    def __init__(self):
        #字段(普通字段)
        self.name = "Alex"
    
    def show(self):
        print(self.name)

 

class province:
    country = "China"
    def __init__(self,name):
        self.name = name
#一般情况,自己访问自己字段
#规则:
#普通字段只能用对象访问
#静态字段用类访问(万不得已时用对象访问)
hn = province("Henan")
hb = province("Hebei")
print(hn.name)   #Henan
print(province.country) #China
print(hn.country) #China

 

方法:

所有的方法属于类

1.普通方法,至少一个self,对象执行

2.静态方法,任意参数,类执行(对象执行)

3.类方法,至少一个class,类执行(对象执行)

class province:
    country = "China"

    def __init__(self,name):
        self.name = name
        #普通方法,用对象去调用执行(方法属于类)

    def show(self):
        print(123)

    @staticmethod
    def f1(cla,arg1,arg2):
        print(arg1,arg2)
        #静态方法,用类调用执行.(当方法内部不需要对象中封装的值时,可以将方法写成静态方法)

    @classmethod
    def f2(cls):  #class
        cls #类名,()创建对象
        #cls()
        print(cls)

obj = province("Henan")
obj.show() #123
province.f1(province,1,2) #1 2
province.f2() #<class ‘__main__.province‘>
class pager:

    def __init__(self,all_count):
        self.all_count = all_count

    @property
    def all_pager(self):
        a1,a2 = divmod(self.all_count,10)
        if a2 == 0:
            return a1
        else:
            return a1 +1

    @all_pager.setter
    def all_pager(self,value):
        print(value)

    @all_pager.deleter
    def all_pager(self):
        print("del all_pager")



p = pager(101)
print(p.all_count) #字段,101
#result = p.all_pager()#方法
ret = p.all_pager
print(ret)    #11
p.all_pager = 111 #111
del p.all_pager  #del all_pager

属性:

不伦不类的东西

具有方法的写作形式,具有字段的访问形式

 

class foo:

    __cc = "123"

    def __init__(self,name):
        self.name = name

    def f1(self):
        print(self.name)

obj = foo(alex)
print(obj.name) #alex
obj.f1() #alex

 

class Foo:

    __cc = "123"

    def __init__(self,name):
        self.name = name  #定义一个私有的普通字段

    def f1(self):
        print(self.name)

    @staticmethod
    def f3():
        print(Foo.__cc)

#print(Foo.__cc)
obj = Foo("ddd")
obj.f3() #123
Foo.f3() #123

 私有普通方法

class Foo:

    __cc = "123"

    def __init__(self,name):
        self.__name = name  #定义一个私有的普通字段

    def f1(self):
        print(self.__name)

class Bar(Foo):

    def f2(self):
        print(self.__name)

obj = Bar("alex")
obj.f1() #alex   #通过调用类中的公有方法来执行私有方法

 私有静态法

class Foo:

    def __init__(self,name):
        self.__name = name  #定义一个私有的普通字段

    @staticmethod
    def f2(num):
        print(num)

    @staticmethod
    def f3(num):
        print(num)

Foo.f3(10)  #10

  

class Foo:
    #构造方法
    def __init__(self,name,age):
        self.name = name
        self.age = age

    #析构方法
    def __del__(self):
        pass

    def __call__(self):
        print("call")

    def __str__(self):
        return("%s-%d"%(self.name,self.age))

‘‘‘obj = Foo()
obj() #对象()执行call
#Foo()()‘‘‘

obj1 = Foo(alex,74)
obj2 = Foo(eric,93)
print(obj1,obj2) #alex-74 eric-93

ret =str(obj1)
print(ret)   #alex-74

#获取对象中封装的数据
ret = obj1.__dict__
print(ret)   #{‘name‘: ‘alex‘, ‘age‘: 74}

 

以上是关于Python笔记总结week8的主要内容,如果未能解决你的问题,请参考以下文章

机器学习- 吴恩达Andrew Ng Week8 知识总结 Dimensionality Reduction

Coursera机器学习week8 笔记

week8总结

学习笔记:python3,代码片段(2017)

python常用代码片段总结

Week8-python(线程进程协程)