11 面向对象编程

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/86622145
  1. self
    同一个类可以生成无数个对象,当一个对象的方法被调用时,对象会将自身的引用作为第一个参数传给该方法,python便知道需要操作谁

如果将类比作图纸,那么由类实例化后的对象为可以住的房子。根据一张图纸可以设计出成千上万的房子,但是每个房子都有自己的主人。这里的self就相当于每个房子的门牌号,有了self就可以轻松知道自己的房子。

class Ball:
    def setName(self, name):
        self.name = name
    def kick(self):
        print('我叫 %s ,少林足球传承人' % self.name)

a = Ball()
a.setName('飞轮镖')
b = Ball()
b.setName('回旋镖')
a.kick()	#返回结果:我叫 飞轮镖 ,少林足球传承人
b.kick()	#返回结果:我叫 回旋镖 ,少林足球传承人
  1. “ _ _init _ _( )”
    _ _ init _ _()是Python里面的构造方法,只要实例化一个对象,这个方法就会在对象被创建时自动调用
class Potato:
    def __init__(self, name):
        self.name = name
    def kick(self):
        print("我叫 %s ,蔬菜里的大头" % self.name)
p = Potato('土豆')
  1. 公有和私有

对于Python,默认上对象的属性和方法都是公开的,可以直接通过操作符(.)进行访问

    class Person:
        name = '小明'
    p = Person()
    p.name

为了实现类似私有变量的特征,Python内容采用了一种叫name mangling(名字改编)的技术, 在python中定义私有变量只需要在变量名或者函数名前加"__"两个下划线

class Person:
    __name = "test"
    
p = Person()
p.__name
#返回结果:
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'Person' object has no attribute '__name'

此时要想实现访问只能从内部进行访问

class Person:
    def __init__(self, name):
        self.__name = name

    def getName(self):
        return self.__name

p = Person('小明')
p.getName()	#返回结果:小明

python目前的私有机制都是伪机制,在外部可以通过“_类名__变量名”既可以访问双下横线开头的私有变量

p._Person__name

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/86622145
今日推荐