@zzy0471
2018-04-08T08:56:29.000000Z
字数 1480
阅读 1206
Python
使用class
关键字可以定义类:
class Person(object):
pass
def print_name(person):
print(person.name)
p1 = Person() #实例化Person的一个实例
p1.name = 'Joey' #增加一个属性
p1.print_name = print_name #增加一个方法
p1.print_name(p1) #调用方法,输入结果:Joey
Python是类似于JavaScript的动态语言,一个实例化后的对象可以随意添加属性和方法。但是怎么做个人认为只能徒添混乱,最好能够在类中定义好属性和方法,而不要再实例化好的对象上进行,更一般的用法是这样:
class Person(object):
def __init__(self, name):
self.name = name
def print_name(self):
print(self.name)
p1 = Person('Joey')
p1.print_name() #输出 Joey
self
表示当前实例化的对象,__init__
方法类似于静态面向对象语言中的构造函数。在调用实例方法时不必显示传递当前实例,解释器会自动进行。
class Person(object):
class_var = 'hello'
def __init__(self, name):
self.__name = name
p1 = Person('Joey')
p2 = Person('Ross')
print(p1.class_var) #hello
print(p2.class_var) #hello
Person.class_var = 'world'
print(p1.class_var) #world
print(p2.class_var) #world
Python定义的类中的属性和方法并无public,private等访问限制修饰符,通常私有属性和方法用下划线或双下划线开头。使用下划线开头的属性和方法在类的外部依然可以访问,只是一种约定成俗的做法。使用双下划线的类成员会被解释器重命名,在类的外部无法访问。上面的Person最好改成如下形式,这样更符合面向对象编程的思想:
class Person(object):
def __init__(self, name):
self.__name = name
def print_name(self):
print(self.__name)
自类中可以通过在__init__
方法中直接调用父类的__init__
方法实现父类的构造,但还有更好的方法:使用方法super
:
class Person(object):
def __init__(self, name):
self.__name = name
def print_name(self):
print(self.__name)
class Student(Person):
def __init__(self, name, school):
super(Student, self).__init__(name)
self.__school = school
def print_school(self):
print(self.__school)
s = Student('Joey', 'DLPU')
s.print_name()
s.print_school()
Python支持多继承,但个人建议不使用多继承。C#和Java等静态语言只支持单继承,但是它们有接口的概念,一个类可以实现多个接口,Python是否可以仿写这样的规则,有待日后考察