python技巧合集(四)
-
python中没有do..while循环
-
class Car: price = 100000 def __init__(self, c, w): self.color = c self.__weight = w car1 = Car("Red", 10.5) car2 = Car("Blue", 11.8) print(car1.color) print(car1._Car__weight) print(car1.__weight)关于python的私有变量,运行结果: Red 10.5 Traceback (most recent call last): File "E:\系统工程组\code\learn_python\Car.py", line 11, in <module> print(car1.__weight) AttributeError: 'Car' object has no attribute '__weight' -
python中的成员属性有两种,一种是实例属性,在构造函数__init__()中定义,一种是类属性,在类中方法之外定义。在类的外部,实例属性属于对象,只能通过对象明访问;类属性属于类,可以通过类名访问,也可以通过对象名访问,为类的所有实例共享。
-
类中定义的方法大致分为公有方法、私有方法、静态方法。其中公有方法和私有方法属于对象,私有方法以两个下划线__开始,每个对象都有自己的公有方法和私有方法。公有方法通过对象名调用,私有方法只能在属于对象的方法中通过self调用,或者在外部通过Python支持的特殊方式来调用。如果通过类名来调用属于对象的公有方法,需要显示为该方法的self传递一个对象名,用来明确指定访问哪个对象的数据成员。静态方法可以通过类名和对象名调用,但是不能直接访问属于对象的成员,只能访问属于类的成员。
-
派生类不能访问父类的私有成员。
python中继承的特点:1. 基类的__init__函数不会自动调用,需要在派生类的构造中专门调用。2. 需要在派生类中调用基类的方法时,有两种方式。a. super(), b. 基类.方法名(self) 3. 先在本类中找调用的方法,再去各级基类查找
class Person(object): def __init__(self, name='', age=20, sex='man'): self.setName(name) self.setAge(age) self.setSex(sex) def setName(self, name): self.__name = name def setAge(self, age): self.__age = age def setSex(self, sex): self.__sex = sex def show(self): print('姓名:', self.__name, '年龄:', self.__age, '性别:', self.__sex) class Student(Person): def __init__(self, name='', age=20, sex='man', schoolyear=2016): super(Student, self).__init__(name, age, sex) self.setSchoolyear(schoolyear) def setSchoolyear(self, schoolyear): self.__schoolyear = schoolyear def show(self): Person.show(self) # or super(Student, self).show() print('入学年份', self.__schoolyear) if __name__ == '__main__': zhangsan=Person('zhangsan', 21, '男') zhangsan.show() lisi = Student('lisi', 18, '男', 2025) lisi.show() lisi.setAge(20) lisi.show()