1.在类里面方法之外定义的属性必定不能被self修饰–【类里面方法之外定义的属性–类属性】
2.对于有self前缀修饰的变量都必须有将类实例化才能使用–【self前缀修饰的变量–实例变量】
3.init 函数只会在类实例化时调用
当使用的子类的init()函数重写时:
4.子类实例化时并不会实例化一个无名基类(父类)
5.类的封装性不足,子类可调用父类的私有方法–当父类私有方法没有使用实例变量时不会出错
当使用的子类的init()函数继承于父类时:
4.子类实例化时会实例化一个无名基类(父类)
5.类的封装性不足,子类可调用父类的私有方法–当父类私有方法使用实例变量时也不会出错
样例1
classProgramming.py
class Person:
# 定义在类内部但在方法之外, 被称为类属性
sex = 'man'
"""在类里面方法之外定义的属性必定不能被self修饰"""
def __init__(self):
"""self 指的是类的实例本身,类比C++中的this,
所以对于有self前缀修饰的变量都必须有将类实例化才能使用"""
# init 函数只会在类实例化时调用
# 定义该普通变量weight,受限于定义域
weight = 45
self.name = '#Person#'
self.age = 0
print('This is Person __init__ function')
def print_message(self):
print('This is public function.')
def __print_message2(self):
print('This is private function.')
def using_pri_func(self):
self.__print_message2()
def get_name(self):
return self.name
def get_age(self):
return self.age
class Student(Person):
def __init__(self):
self.name = 'Eugene-Forest'
print('This is Student __init__ function')
"""man = Person()
man.print_message()
# 可通过该格式访问私有函数,侧面说明封装性的不足
man._Person__print_message2()"""
usingStu.py
from classPro import Student
try:
stu = Student()
print(stu.get_name())
print(stu.sex)
# print(stu.weight)
print(stu.get_name())
stu.print_message()
stu.using_pri_func()
stu._Person__print_message2()
print(stu.get_age())
except AttributeError:
print("'Student' object has no attribute 'XXX'")
**
This is Student init function
Eugene-Forest
man
Eugene-Forest
This is public function.
This is private function.
This is private function.
‘Student’ object has no attribute ‘XXX’
Process finished with exit code 0**
样例二
PS:将Student的init()函数注释掉
classProgramming.py
class Person:
# 定义在类内部但在方法之外, 被称为类属性
sex = 'man'
"""在类里面方法之外定义的属性必定不能被self修饰"""
def __init__(self):
"""self 指的是类的实例本身,类比C++中的this,
所以对于有self前缀修饰的变量都必须有将类实例化才能使用"""
# init 函数只会在类实例化时调用
# 定义该普通变量weight,受限于定义域
weight = 45
self.name = '#Person#'
self.age = 0
print('This is Person __init__ function')
def print_message(self):
print('This is public function.')
def __print_message2(self):
print('This is private function.')
def using_pri_func(self):
self.__print_message2()
def get_name(self):
return self.name
def get_age(self):
return self.age
class Student(Person):
pass
"""def __init__(self):
self.name = 'Eugene-Forest'
print('This is Student __init__ function')"""
"""man = Person()
man.print_message()
# 可通过该格式访问私有函数,侧面说明封装性的不足
man._Person__print_message2()"""
usingStu.py
from classPro import Student
try:
stu = Student()
print(stu.get_name())
print(stu.sex)
# print(stu.weight)
print(stu.get_name())
stu.print_message()
stu.using_pri_func()
stu._Person__print_message2()
print(stu.get_age())
except AttributeError:
print("'Student' object has no attribute 'XXX'")
**This is Person init function
#Person#
man
#Person#
This is public function.
This is private function.
This is private function.
0
Process finished with exit code 0**