面向对象
类
# 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
# 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
# class关键字是定义类的关键,括号是继承额类,支持多继承
class Student():
pass
实例
# 定义类之后就可以通过类来创建实例,类名也可以获取类本身
print(Student)
# 类复制给变量,和方法一样类通过类名和括号调用,括号传递构造方法的参数
student=Student()
print(student)
<class '__main__.Student'>
<__main__.Student object at 0x0000022BBF77C790>
构造方法
# 类的__init__是构造方法
class Student(object):
def __init__(self,name,id,address):
self.name=name
self.id=id
self.address=address
def newStudent(self):
print("Student(name={0},id={1},address={2})".format(self.name,self.id,self.address))
student=Student('zhansna',12,'beijin')
student.newStudent()
Student(name=zhansna,id=12,address=beijin)
# 在构造方法中定义的变量为实例变量,只有在实例中才可以访问
类方法
# 类方法和普通的函数相比,只有一点不同,类方法第一个参数永远this,并且调用时不用传递该参数。
# this表示类本身
class Student(object):
def __init__(self,name,id,address):
self.name=name
self.id=id
self.address=address
def newStudent(self):
print("Student(name={0},id={1},address={2})".format(self.name,self.id,self.address))
# newStudent就是类方法,通过实例化类来调用类方法
Student('lihua',2,'tianjin').newStudent()
Student(name=lihua,id=2,address=tianjin)
# 方法处理定义在类中还可以定义在构造方法中为实例方法,只有在实例中才可以访问,不常用。
# 类方法可以通过_来封装
类变量
# 类的变量可以定义在类中为成员变量
# 类的变量可以定义在构造方法中为实例方法,创建实例才可以访问
# 类的变量定义在方法中为局部方法
class Person(object):
__name__=None
__age__=None
def __init__(this,name,age):
this.__name__=name
this.__age__=age
def showPerson(this):
print('Person(name={0},age={1})'.format(this.__name__,this.__age__))
Person('lihua',22).showPerson()
Person(name=lihua,age=22)
继承
# class关键字定义类后,括号中写该类的继承类
class Student():
pass
# 未定义默认object,所有类都继承object
class Animal(object):
name=None
shout=None
class Dog(Animal):
封装
在Python中,变量名类似__xxx__
的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量
,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__
这样的变量名。
要定义私有变量只能是_
或__
开头
Person('zhansan',22).__name__
'zhansan'
class Person1(object):
name=None
__age__=None
__id=None
def __init__(self,name,age,id):
self.name=name
self.__age__=age
self.__id=id
person1=Person1('zhansan',22,123456789)
print(person1.name)
print(person1.__age__)
print(person1.__id)
zhansan
22
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_8584/1129592823.py in <module>
10 print(person1.name)
11 print(person1.__age__)
---> 12 print(person1.__id)
AttributeError: 'Person1' object has no attribute '__id'
# 类变量可以在构造方法中定义,实例变量只能在实例中访问
# 通过定义setter和getter方法对成员变量更改和获取
多态
# 继承的最大的好处是子类获得了父类的全部功能。
# 子类也可以增加一些额外的方法,或对父类的方法重写
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156288.html