码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象编程

时间:2020-03-06 11:21:00      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:返回   获取对象   决定   error   默认值   generator   函数   cas   语言   

类和实例

访问限制

如果让内部属性不被外部访问,可以在属性名称前加__,python中,实例的变量如果以__开头,就变成了私有变量

class Student(object):

    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print('%s: %s'%(self.__name, self.__score))

继承和多态

判断某个变量是否是某种类型

isinstance(a, Animal)#判断a是否是Animal类型

动态语言的鸭子类型决定了继承不像静态语言那样是必须的

获取对象信息

使用type(),判断对象类型,返回对应的Class类型

type(123)#<class 'int'>
type('str')#<class 'str'>
type(None)#<class(None) 'NoneType'>
type(abs)#<class 'builtin_function_or_method'>
type('a')==str#True

判断一个对象是否是函数,使用types模块中定义的常量

import types
def fn():
    pass
type(fn)==types.FunctionType#True
type(abs)==types.BuiltinFunctionType#True
type(lambda x:x)==types.LambdaType#True
type(x for x in range(10))==types.GeneratorType#True

能用type()判断的基本类型也能用isinstance()判断

isinstance('str',str)#True
isinstance([1,2,3,4],(list,tuple))#True

使用dir()获取一个对象的所有属性和方法

dir('abc')
#['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']

类似__xxx__的属性和方法在Python中是有特殊用途的,如__len__方法返回长度,python中的len()方法其实就调用了__len__

len('abc')#3
'abc'.__len__()#3

自己写的类,如果也想用len(),则要实现__len__()
仅仅获得属性和方法还是不够的,配合getattr(),setattr(),hasattr()可以直接操作一个对象的状态

class MyObject(object):
    def __init__(self):
        self.x = 9
    def power(self):
        return self.x*self.x
obj = MyObject()
getattr(obj,'power')
fn = getattr(obj,'power')
fn()#81
hasattr(obj,'x')#True
obj.x#9
setattr(obj,'y',19)#设置一个属性'y'

如果试图获取不存在的属性,则会抛出AttributeError,可以传入一个default值,当属性不存在,就返回默认值

getattr(obj,z‘404‘)

实例属性和类属性

类本身绑定的属性称为类属性

class Student(object):
    name = 'Student'
s = Student()
print(s.name)#Student
print(Student.name)#Student

为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加

class Student(object):
    count = 0
    def __init__(self, name):
        self.name = name
        Student.count += 1

面向对象编程

标签:返回   获取对象   决定   error   默认值   generator   函数   cas   语言   

原文地址:https://www.cnblogs.com/waynew/p/12424917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!