• python面向对象之 类


    内容梗概:
    1. 类的成员
    2. 类的成员-变量
    3. 类的成员-方法
    4. 类的成员-属性
    5. 私有

    1.类的成员
    class 类名:
    方法
    def __init__(self, 参数1, 参数2....):
    属性变量
    self.属性1 = 参数1
    self.属性2 = 参数2

    方法
    def method(self):
    pass
    如上图中__init__和method都属于类的成员方法. 又称为实例例⽅方法. 总之这样的东西需要⽤用对象来访问.
    ⽽上方的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息. 含义是这个对象的xxx属性是xxxx.
    这种东西又被称之为成员变量或者实例变量, 再或者被称之为字段. 都是⼀个意思


    2. 类的成员-变量
    在类中变量分成两大类:
    1. 实例变量(字段)
    2. 类变量(静态变量)

    区别看实例:
    class Person():
    country = "china" ## 类变量, 表示所有的该类的对象都共享这个变量量.
    def __init__(self,name,age):
    # 实例变量(字段) 表示你创建的每⼀个人都有这三个变量
    self.name = name
    self.age = age

    Person.country = "三里屯" # 直接使用类名进行访问
    n1 = Person("alxe",15)
    n1.country = "马厩" # 添加了一个实例变量
    print(n1.name)
    print(n1.country) # 类变量的修改只能通过类名来完成

    Tips:类变量,最好是用类名来访问.当然,我们通过对象名也可以访问.但只能看,不能改变它.想要改变它,需要用类名来改变它
    总结:
    实例变量, 给对象⽤用的.
    类变量, 多个对象共享的. 最好是用类名来访问. 这样更加规范.


    3. 类的成员-方法
    1. 成员方法(实例方法)
    2. 静态方法
    3. 类方法

    3.1.1. 成员方法(实例方法)
    class Car:
    def run(self):
    print("会跑的车")
    def cul(self, a, b):
    return a + b
    def jump(self):
    print("you jump i jump")

    c = Car()
    c.run() # 调用实例方法,平常用的最多的,没啥说的了
    print(c.cul(1 , 3))
    c.jump()

    3.1.2 静态方法和类方法
    实例1
    class Person:
    def chi(self): # 实例方法
    print("人在吃")
    类方法
    @classmethod # 类方法
    def he(cls): # cls 类
    print(cls)
    print("我是喝")
    #静态方法
    @staticmethod
    def shui(): # 在类中定义的一个普通函数
    print("和你睡不等于睡你 -- 姜文")

    @staticmethod
    def 上天(height): # 在类中定义的一个普通函数
    print("上天%s" % height)

    print(Person)
    Person.he() # 不管用对象还是用类去访问类方法. 默认传递进去的是类
    p = Person()
    p.he() # 不管用对象还是用类去访问类方法. 默认传递进去的是类

    Person.shui() #静态方法调用的时候没啥区别
    Person.上天(500)

    p = Person() #实例对象也可以调用
    p.shui()
    p.上天(50)


    4. 类的成员-属性

    class User:
    def __init__(self, name, birthday, qq, email):
    self.name = name
    self.birthday = birthday
    self.qq = qq
    self.email = email

    @property # 可以把一个方法变成一个属性
    def age(self):
    return 2018 - self.birthday #需要有返回值

    u = User("alex", 1968, 1024663304, "haha@126.com")
    print(u.age) #调用不需要写括号,当成属性变量来⽤就可以了
    u.qq = 10010
    u.age = 18 #不能赋值

    注意使用 @property 的几点
    1.函数只能有一个self参数.
    2.需要有返回值
    3.不能赋值
    4.调⽤的时候, 我们不需要写括号.直接当成属性变量来⽤就可以了

    5. 私有
    详细看实例:
    class Person:
    __wife = "嘿嘿" #私有的
    def __init__(self, name): # 构造, 创建对象的时候自动调用
    self.__name = name # 私有的
    print("这里是构造方法")

    def init(self):
    print("实例方法")


    def __chi(self): # 私有的
    print("我要吃. 疯狂的吃")

    def he(self):
    self.__chi() # 内部调用私有方法
    print("我是喝", self.__name) # 内部可以调用私有属性
    print(Person.__wife) # 内部可以调用私有属性

    p = Person("孙艺珍")
    p.he()
    p.init()
    p.__init__("哈哈哈") # 也可以这样调用构造方法,但是很low,看着蠢,不要这样用
    print(p.__name) #外部调用私有属性会报错
    p.__chi() #外部调用私有方法会报错

    记住, 私有的内容不能直接访问. 但是如果对方开辟了了外界访问的通道(公共⽅方法).
    那可以通过这个公共的⽅方法来获取到私有的内容. 这样做的好处是. 外界, 只能看, 但是改不了了.

    补充:需要注意的是, 对于私有的内容⽽言. 子类是无法继承的.
    实例:
    class Fu:
    __qingfu = "情妇_⼩小潘潘"
    class Zi(Fu):
    pass
    print(Zi.__qingfu) # 报错
  • 相关阅读:
    JAVA日报
    JAVA日报
    论文爬取(七)
    论文爬取(六)
    论文爬取(五)
    JAVA日报
    JAVA日报
    剑指 Offer 68
    剑指 Offer 68
    剑指 Offer 67. 把字符串转换成整数
  • 原文地址:https://www.cnblogs.com/Mixtea/p/9922817.html
Copyright © 2020-2023  润新知