python oop 实践_Python_OOP

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

4999元包邮

去购买 >

define class

class的三个组成部分:

类的名称:类名

类的属性: 一组数据

类的方法:允许对进行操作的方法(行为)

定义

class Student (object):

pass

class后面定义类名(类名通常是大写开头的单词)

(object),表示该类是从哪个类继承下来的

实例化

创建实例是通过类名+()实现

stu = Student()

class Stu (): # 定义class

age = 10 # 属性

def show (self): # 方法

print(self.age) # 类中获取属性

print(self, 'self')

print(stu.name) # 获取类外添加属性

stu = Stu() # 实例化

stu.name = 'sf' # 添加属性

stu.show() # 调用方法

self

self当前实例化的对象

在定义函数的时候,第一个参数需要self

class Stu ():

def show_name (self):

print(self.name)

stu = Stu()

stu.name = 'sf'

stu.show_name()

self在定义时需要定义,但是在调用时会自动传入。

self的名字并不是规定写死的,但是最好还是按照约定是self。

self总是指调用时的类的实例。

init

魔法方法:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

__init__: 构造函数(魔法方法)

class Stu ():

# 初始化对象

def __init__ (self, new_name, new_age):

self.name = new_name

self.age = new_age

def show (self):

print('name: %s, age: %d' % (self.name, self.age))

stu = Stu('sf', 23)

stu.show()

创建对象的过程:

创建一个对象

Python解释器会自动的调用__init__方法

返回创建的对象的引用,给实例

__str__: 实例化执行该方法,返回值。

当需要print一个类的时候,需要先在类中定义__str__方法,返回值,就是print()输出的值

class Stu ():

def __init__ (self, new_name):

self.name = new_name

def __str__ (self):

return self.name

私有方法和私有属性

私有属性

按照约定俗成的规定__开头的属性表示私有属性, 不可以直接类名.变量名访问

在类中存储的形式为:_Stu__age, _类名__变量名

class Stu():

def __init__(self, new_name):

self.name = new_name

self.__age = 0 # 定义了一个私有的属性,属性的名字是`__age`

在类中访问形式:self.__变量名

私有方法(private)

按照约定俗成的规定__开头的属性表示私有方法, 不可以直接类名.方法名访问

存储的形式为:_Stu__get_age, _类名__方法名

class Stu():

def __test(self): # 定义私有方法

pass

在类中调用私有方法:self.__方法名()

有些时候,会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

del

__del__: 当删除一个对象时,python解释器会默认调用一个魔术方法,__del__()

class Stu():

def __del__ (self):

print('remove obj')

stu = Stu()

del stu

在类的生命周期中,如果类销毁了,python会自动调用__del__方法。也就是说,不管是手动调用del还是由python自动回收都会触发__del__方法执行。

对象引用个数

模块sys中有一个getrefcount方法可以测试对象的引用个数

返回的结果,会比实际结果大1.

import sys

sys.getrefcount('变量/方法')

继承

class Animal(object):

def run(self):

print('Animal is running')

class Dog(Animal): # 继承

def run(self):

print('Dog is running')

class Cat(Animal):

pass

dog = Dog()

cat = Cat()

dog.run()

cat.run()

当子类和父类都存在相同的run()方法时,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run() -- 多态

重写

重写子类的方法

原文链接:https://segmentfault.com/a/1190000013175369

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值