zoukankan      html  css  js  c++  java
  • python之类(class)的笔记

    # __*__ coding: utf-8 __*__
    # __author__ = "David.z"
    
    # dict ={
    #     1:{"name":"alex",
    #        "role":"terrorist",
    #        "weapon":"C33",
    #        "life_value":"100",
    #        "money":15000,},
    #     1:{"name":"alex",
    #        "role":"terrorist",
    #        "weapon":"C33",
    #        "life_value":"100",
    #        "money":15000,},
    #     2:{"name":"tom",
    #        "role":"terrorist",
    #        "weapon":"B25",
    #        "life_value":"100",
    #        "money":15000,},
    #     3:{"name":"jack",
    #        "role":"police",
    #        "weapon":"B51",
    #        "life_value":"100",
    #        "money":15000,},
    #     4:{"name":"lily",
    #        "role":"police",
    #        "weapon":"G31",
    #        "life_value":"100",
    #        "money":15000,},
    # }
    # print(dict[1])
    # print(dict[2])
    # print(dict[3])
    # print(dict[4])
    class Role(object):
        n=123
        n_list=[]
    
        def __init__(self,name,role,weapon,life_value=100,money=15000):
            #构造函数
            #在实例化时做一些类的初始化的工作
            self.name = name
            self.role = role
            self.weapon = weapon
            self.__life_value = life_value#这个是一个私有属性,如果要调用,需要在里面在加一个方法调用,如def show_status()
            
            self.money = money
        def __del__(self):
            pass
            #print("%s彻底死了。。。"%self.name)
        def show_status(self): #这里就是我在调用私有属性,同理,如果要用私有方法,也是加__
            print("name:%s weapon:%s life_value:%s"%(self.name,
                                                         self.weapon,
                                                         self.__life_value
                                                     ))
            return "hello"
        def shot(self):
            print("%s shooting..."%self.name)
    
        def got_shot(self):
            print("ah...,%s got shot..."%self.name)
    
        def buy_gun(self,gun_name):
            print("%s just bought %s"%(self.name,gun_name))
    
    r1 = Role('Alex',"police",'AK47') #实例化,(初始化一个类,造了一个对象)
    r1.n="r1变量改了"
    r1.n_list.append("r1添加")
    
    r2 = Role('Jack',"terrorist",'B22') #生成一个角色
    r2.n="r2变量改了"
    Role.n = "类变量改了"
    r2.n_list.append("r2添加")
    print(r1.show_status())
    # print(Role.n,r1.got_shot(),r1.n)
    # print("类:",Role.n_list)
    # print("r1:",r1.n_list)
    # print("r2:",r2.n_list)
    # print(Role.n,r2.buy_gun("狙击"),r2.n)

    今天开始学习面向对象和面向过程的两种编程方式。

    其实我们之前开始写的脚本类的编程,都可以叫做面向对象的编程。

    那么什么面向对象,借用Alex的话,世间万物都有是有类可以分的。这里我们就引出了类。

    面向对象包括:对象、封装、继承、多态的特性。

    类里面我们说有对象和实例化。还包括构造函数和析构函数。

    构造函数: def __init__(self):

    析构函数: def __del__(self):

    然后讲到了类的继承。

    比如有一个父类People ,两个子类,一个Man ,一个Women。

    我们说子类可以调用父类里的方法,当子类和父类的方法有同名时,也可以可以通过

    把父类的方法先传进去。

    但是两个子类直接的方法的是不可以调用的。

     1 # __*__ coding: utf-8 __*__
     2 # __author__ = "David.z"
     3 class People:
     4     def __init__(self,name,age):
     5         self.name = name
     6         self.age = age
     7     def eat(self):
     8         print("%s is eating..."%self.name)
     9     def sleep(self):
    10         print("%s is sleeping..."%self.name)
    11     def talk(self):
    12         print("%s is talking..."%self.name)
    13 
    14 class Man(People): #继承父类
    15     def piao(self):
    16         print("%s is piaoing......20s....done"%self.name)
    17 
    18     def sleep(self):
    19         People.sleep(self) #把父类方法线传进去
    20         print("子类man is sleeping")
    21 
    22 class Woman(People):
    23     def get_birth(self):
    24         print("%s is born a baby..."%self.name)
    25 m1 = Man("ZhangSan",22)
    26 m1.eat()
    27 m1.sleep()
    28 m1.piao()
    29 w1 = Woman("ChenRonghua",26)
    30 w1.get_birth()
    View Code

     其实这种是单继承,还有多继承,就是继承2个类或者多个类。

    如代码

     1 # __*__ coding: utf-8 __*__
     2 # __author__ = "David.z"
     3 # class People:#经典类
     4 
     5 class People(object):#新式类
     6 
     7     def __init__(self,name,age):
     8         self.name = name
     9         self.age = age
    10     def eat(self):
    11         print("%s is eating..."%self.name)
    12     def sleep(self):
    13         print("%s is sleeping..."%self.name)
    14     def talk(self):
    15         print("%s is talking..."%self.name)
    16 
    17 class Relation(object):
    18     def __init__(self):
    19         print (self.name)
    20 
    21     friends = []
    22     def make_friends(self,obj):
    23         print("%s is making friends with %s "%(self.name,obj.name))
    24         self.friends.append(obj)
    25 
    26 class Man(People,Relation): #继承父类
    27     # def __init__(self,name,age,money):
    28     #     # People.__init__(self,name,age)
    29     #     super(Man, self).__init__(name,age)#继承父类的,可以上面那样写,也可以这样写,新式类写法
    30     #     self.money = money
    31     #     print ("%s 一出生就有%s 元钱"%(self.name,self.money))
    32     def piao(self):
    33         print("%s is piaoing......20s....done"%self.name)
    34 
    35     def sleep(self):
    36         People.sleep(self) #把父类方法线传进去
    37         print("子类man is sleeping")
    38 
    39 class Woman(People,Relation):
    40     def get_birth(self):
    41         print("%s is born a baby..."%self.name)
    42 m1 = Man("ZhangSan",22)
    43 # m1.eat()
    44 #
    45 # m1.sleep()
    46 # m1.piao()
    47 
    48 w1 = Woman("ChenRonghua",26)
    49 w1.get_birth()
    50 m1.make_friends(w1)
    51 w1.name = "陈三炮"
    52 print(m1.friends[0].name)
    View Code

    这里说一下py2和py3还有新式类和经典类的继承方式。

    里面包含两个概念,广度优先和深度优先。

    默认py3里面经典类和新式类都是广度优先的方式。

    而py2里面经典类是深度优先,新式类才是广度优先。

    如图。

     1 class A(object):#现在是py3,也可以变成新式类加object
     2     def __init__(self):
     3         print("A")
     4 class B(A):
     5     pass
     6     # def __init__(self):
     7     #     print("B")
     8 class C(A):
     9     # pass
    10     def __init__(self):
    11         print("C")
    12 class D(B,C):
    13     pass
    14     # def __init__(self):
    15     #     print("D")
    16 
    17 obj = A()
    18 obj = B()
    19 obj = C()
    20 obj = D()
  • 相关阅读:
    ISBN号码
    计数问题
    小玉在游泳
    数字反转
    单调队列(学习笔记)
    LCA(学习笔记)
    emacs配置文件
    线段树(学习笔记)
    RMQ问题 ST算法(学习笔记)
    Lucas卢卡斯定理(学习笔记)
  • 原文地址:https://www.cnblogs.com/davidz/p/9851005.html
Copyright © 2011-2022 走看看