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

    '''
    1.类的成员
    class Foo:
    # 构造方法
    def __init__(self, name):
    self.name = name #实例变量/字段
    # 普通方法
    def func(self):
    pass

    # obj是Foo类的对象,或称为Foo类的实例
    obj = Foo('实参')

    2.成员共分为三类:
    变量:
    -实例变量(字段)
    -公有变量
    -私有变量:用'__'把变量私有化
    -类变量(静态字段)
    -公有变量
    -私有变量:用'__'把变量私有化,类外无法调用,只能在类里面被调用.且私有变量无法被子类继承,也即子类也无法调用,只能父类调用
    class Foo:

    #类变量/静态字段
    country = '中国'

    def __init__(self, name):
    self.name = name #实例变量/字段
    Foo.country = '中国' #类变量可直接通过 类名.类变量 的方法调用,当然用obj也可以调用

    注意:方法中的私有变量只有该方法能够调用,类中的私有变量只有该类才能调用,就算是在该类中的方法也无法直接调用
    class B:
    __a = 13
    def f1(self):
    __b = 13
    def f2(self):
    b = B.__a + 2 #只有通过类名才可调用该类中的私有变量,该类中的方法也无法不通过类名直接调用
    b = B.__b #__b属于f1的私有变量,除了f1外,其他方法和类都无法调用,因此这里会报错.
    print(b)
    obj = B()
    obj.f2()

    方法:
    -实例方法
    -静态方法
    -类方法

    何时写实例方法?
    当方法需要使用对象中封装的值时,可以用实例方法.也即方法中有调用构造方法中的实例变量时.
    class Foo(object):
    def __init__(self, name):
    self.name = name

    def func(self):
    print(self.name) #func中有调用__init__中封装的属性,因此可以说是实例方法,当未调用时,不能成为实例方法

    obj = Foo('alex')
    obj.func()

    静态方法:
    当方法中无需使用对象中封装的值时,可以选择静态方法.
    class Foo(object):
    def __init__(self, name):
    self.name = name

    @staticmethod
    def display(): # 静态方法前需要加@staticmethod,且静态方法可以没有参数,当然加上参数也可以.
    print('999') # 静态方法只能被对象调用,而实例方法对象和类都可以调用,这也是二者的区别.

    类方法:
    如果你需要在你的方法中用到你当前的这个类时,可以选择类方法.
    class Foo(object):
    def __init__(self, name):
    self.name = name

    @classmethod
    def show(cls, x1, x2): #同实例方法中必有一个self参数一样,类方法中必有一个cls参数.
    print(cls, x1, x2) #类方法在传参时不用传cls位置的参数,这个系统会自动把当前类传进去

    Foo.show(1,8) #用 类名.方法() 的方式进行调用

    静态方法/类方法 和实例方法的区别是什么?
    1.定义时不同,实例方法前无@等属性
    2.调用时不同,实例方法需要先实例化对象,在通过对象来调用,但静态方法和类方法可直接通过类名来调用.
    3.使用环境不同,当你的方法中不需要用到对象封装的属性时,用静态方法,且当需要用到当前类时用类方法,否则用实例方法.

    私有方法:
    私有实例方法:
    class Foo(object):
    def __init__(self, name):
    self.name = name

    def __display(self, arg):
    print('私有方法', arg)

    obj = Foo()
    obj.__display() #此句会出错,因为__display属于私有方法,无法在外部被访问

    私有静态方法:
    class Foo(object):
    def __init__(self, name):
    self.name = name

    @staticmethod
    def __display(arg):
    print('私有静态方法', arg)

    def func(self):
    Foo.__display(123) #在类的内部可以调用私有方法

    Foo.__display(123) #此句会报错,因为__display作为私有方法,无法在类外被访问
    属性:
    -公有属性
    -私有属性
    class Foo(object):
    def __init__(self, name):
    self.name = name

    @property
    def start(self): #属性不可以加参数的,只能有一个self,且前面需要有个@property
    return 1

    obj = Foo()
    obj.start #属性方法在调用时是不需要加括号的,也即当你需要调用一个方法,不需要往里面传参且需要该方法给你一个返回值时,建议用属性方法.
    '''
  • 相关阅读:
    BigPipe_高性能流水线页面技术
    高并发大流量网站 10 个解决方法
    崇高不是比惨
    utf-8无bom格式编码
    go.php
    微信+QQ跳转
    java 设计模式-单例
    HTML连载88-今天把努比亚界面仿真写完了(完结连载)
    Android连载10-动态添加页面、创建一个新闻app
    JavaScript连载9-三目运算符、综合复习
  • 原文地址:https://www.cnblogs.com/gongteng/p/13543484.html
Copyright © 2011-2022 走看看