zoukankan      html  css  js  c++  java
  • python--面向对象(02)

    1.类的成员

    在类中你能写的所有内容都是类的成员

     

    class 类名:
        # 方法
        def __init__(self, 参数1, 参数2....):
            # 属性变量量
            self.属性1 = 参数1
            self.属性2 = 参数2
            ....
            
            # ⽅法
            def method(self):
            pass   
    

      

     

    2.变量

    1.实例变量:每个实例都该拥有的变量,由对象去访问的变量. 比如,认得名字,人的爱好每个人的个人信息

    2.类变量:这一类事物同意拥有的变量. 此时.这个变量属于类.但是对象也可以访问. 比如,中国人都拥有同一个国家

    class Person:
    # 类变量, 表示所有的该类的对象都共享这个变量.
        country = "中国"
        def __init__(self, name, num, birthday):
        # 实例例变量(字段) 表示你创建的每一个人都有这三个变量
            self.name = name
            self.num = num
            self.birthday = birthday
    
    p1 = Person("mike", 18, "1999年")
    print(p1.name) # mike
    print(p1.country) #中国
    p2 = Person("bob", 28, "1999年")
    print(p2.name) # bob
    print(p2.country) # 中国

    实例变量中都隐藏着一个创建这个对象的类.通过这个类就能找到我们类中定义的全部内容,包括方法和属性信息等

     

     

    p1 = Person("mike", 18, "1999年")
    p1.country = "美国"
    print(p1.name)
    print(p1.country) # 美国
    p2 = Person("bob", 28, "1999年")
    print(p2.name)
    print(p2.country) # 中国
    

    上面这里其实并没有改变类变量,只是在p1中添加了一个实例变量. 类变量最好是用类名访问,通过对象名也可以访问,但只能看,不能改变,如果想要改变它.需要用类名来改变

    class Foo:
        count = 0
        def __init__(self):
            Foo.count += 1
    print(Foo.count) # 0
    Foo()
    Foo()
    Foo()
    print(Foo.count) # 3
    

    实例变量,给对象用的.

    类变量,多个对象共享的.

     

     

    3.方法

    1.实例方法(成员方法): 使用   对象.方法()   说白了对象直接访问的方法叫成员方法.

    特点: 在声明的时候.需要给出self,self必须放在第一个位置,在调用的时候,自动的会把对象传递给形参的self

    class Computer:
        # 实例方法(成员方法)
        def play(self):
            print("我的电脑可以玩儿")
            
    c = Computer()
    c.play() # 对象直接去调用实例方法
    

      

    2.类方法(@calssmethod):类方法是属于类的

    特点:在声明的时候需要给出一个能够接受类名的参数,cls,也必须在调用的时候,自动的把xx对象的类传递给cls

    class Computer:
        def play(self):
         print("我的电脑可以玩儿")
        @staticmethod
        def fare():
            print("我的电脑非常厉害, 可以煎鸡蛋")
        @classmethod
        def cal(cls, a, b):
            print(cls)
            return a+b
    print(Computer.cal(1, 2)) # 此时会自动的把类名传递给类方法的第⼀个参数
    

      

    3.静态方法(@staticmethod): 静态方法也是属于类的.静态方法就好比,我们在类中定义了一个函数,静态方法一般和类方法差不多.使用类名去访问

     

    @staticmethod
    def fare():
        print("我的电脑⾮常厉害, 可以煎鸡蛋")
    静态⽅法和静态变量一样. ⼀般都是使⽤类名直接访问和调用的.
    Computer.fare() # 类名可以直接访问的
    c.fare() # 对象也可以访问. 但最好不要这么干. 以便于区分静态方法和实例方法
    

      

    4.属性

    在方法上添加一个@property.可以把一个方法变成一个属性,但是这个属性不可以被赋值,当我们某一个属性必须经过计算才能得到结果的时候

    class Person:
        def __init__(self):
            pass
        @property
        def age(self):
            return 1
    p = Person()
    age = p.age
    print(age)
    

    1.比如保存出生年月日用程序来计算年龄.对于年龄来说,应该是一个数值

    2.调用的时候,直接当成属性变量来用就可以了.

    3.这样只能取值,不能设置值

     

     

    5.私有

    所有以双下滑线开头的方法,变量都是私有内容.外界无法访问.除非你主动暴露这些内容

    1.私有变量

    私有的内容不能直接访问.但是如果对方开辟了外界访问的通道(公共方法). 那可以通过这个公共的方法来获取到私有的内容,类变量(静态变量)一样拥有这样的属性

    2.私有方法

    class Person:
        def __init__(self):
            pass
        def __yue(self):
            print("我要约会")
        def job(self):
            print("我要工作")
            self.__yue() # 在自己类中访问自己的其他方法. 哪怕是私有的. 也是自己在用
    p = Person()
    p.job()
    

      对于私有方法,子类是无法继承的

    class Fu:
        __q = "嘻嘻"
    class Zi(Fu):
        pass
    print(Zi.__q) # 报错
    

      

    总结:

  • 相关阅读:
    UVA11464偶数矩阵
    UVA11464偶数矩阵
    UVA11462年龄排序
    UVA11462年龄排序
    UVA11427玩纸牌(全概率+递推)
    UVA11427玩纸牌(全概率+递推)
    UVA11389巴士司机问题
    LA3644简单并查集判环
    LA3027简单带权并查集
    LA3027简单带权并查集
  • 原文地址:https://www.cnblogs.com/robertx/p/10140115.html
Copyright © 2011-2022 走看看