python基础

面向对象编程

python中,万物皆对象,面向对象编程是一种程序设计的思想。对象作为程序的基本单元,一个对象包含了数据和操作数据的函数(即成员变量和成员函数)

面向对象最基本的概念是类和实例`

class Student():
	'''
	__init__(self)就是类初始化的一个构造函数;
	对于类中定义的函数,其第一个参数永远是self,表示实例本身,
	实例在调用函数时,不需要传递该参数;
	'''
	def __init__(self,name,id):
		self.__name=name
		self.__if=if

s1=Student("szs",123)
s2=Student("durant",35)

1 python中类的数据权限和表示:
  • 私有成员变量:以两个单下划线_开头的变量,如__name;
  • 在python中__xxx__ 前后都有两个单下环线的变量是特殊变量,特殊变量可以直接访问,不是私有的
  • 以单个下划线开头的变量名,如_name,这种实例变量在外部是可以被访问的,但是一般按照约定,看到这种变量时,将其视为私有变量,不要随意访问;

双下划线开头的实例变量也不是一定不能在外部访问;原因是python解释器对外把__name变量改成了_Student__name,所以,在外部仍然可以通过_Student__name来访问__name变量;但是建议不要这么干,因为不同版本的python解释器可能会把__name改成不同的变量名。

因此当我们在外部使用__name变量名时,其并不代表该实例的__name私有变量名,而是在外部给实例新增了一个__name变量,改变量与实例的私有变量__name毫无关系

class Student():
    def __init__(self,name,id):
        self.__name=name
        self.__id=id

    def get_student(self):
        print("name is",self.__name)
        print("id is",self.__id)

s1=Student("szs",123)
s1.get_student()
s1.__name="durant"
s1.get_student()    #self.__name并没有改变

在这里插入图片描述

2 python中的继承和多态

python中的多态实现

class Animal():
	def __init__(self):
		pass
	def run(self):
		print("animal is run")
		
class Cat(Animal):
    def run(self):
        print("cat is run")

class Othes():
    def run(self):
        print("i am run")

def run_2(animal):
    animal.run()

run_2(Dog())
run_2(Cat())
run_2(Animal())
run_2(Othes())

注意: python里边的变量命名不需要指明数据类型,包括函数定义的入参

3 实例属性和类属性

由于python时动态语言,根据类创建的实例可以任意绑定属性。给实例绑定属性的方法是通过实例变量或者通过self变量来实现:

class Student(object):
	def __init__(self,name):
		self.name=name

s1=Student("SZS")
s1.score=90

如果Student类本身需要绑定一个属性呢?,可以直接在class中定于属性,这种属性是类属性,归Student类所有

>>> class Student(object):
...     name = 'Student'
...
>>> s = Student() # 创建实例s
>>> print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
Student
>>> print(Student.name) # 打印类的name属性
Student
>>> s.name = 'Michael' # 给实例绑定name属性
>>> print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
Michael
>>> print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
Student
>>> del s.name # 如果删除实例的name属性
>>> print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student
	

因此,在编写程序的时候,千万不要对实例属性和类属性使用同名的名字,因为相同名称的实例属性将屏蔽掉类属性,但当你删除实例属性后,再使用相同的名称,访问到的是类属性;

4 super()函数

super()函数是用于调用父类的一个方法。
super用于解决多重继承问题,直接用类名调用父类的方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序、重复调用等种种问题。
无返回值

'''
python 3.x的语法   super().fun()
'''
class A:
	def add(self,x):
		y=x+1
		print(y)

class B(A):
	def add(self,x):
		super().add(x)
b=B()
b.add(10)  #11

'''
python2.x的语法
'''
super(B,self).add(x)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值