高级语法
1.封装性进阶
原先学习过对属性私有化,在类属性名前加双下划线(即__),只允许本类访问
class Computer(object):
"""
给类添加object
私有化属性 前边加__
setter和getter
"""
def __init__(self):
#私有化属性前边加__
self.__brand="DEll"
#setter方法
def set_brand(self,brand):
self.__brand=brand
#getter方法
def get_brand(self):
return self.__brand
#创建对象
computer=Computer()
computer.set_brand("huawei")
print(computer.get_brand())
(1)形式为“xxxx”或“xxxx()”为公有的,如:公有变量、公有方法,在外部可直接访问;
class Computer(object):
def __init__(self):
# 公有属性
self.brand = "小米"
self.size = 8
def show_info(self):
print("品牌名称:", self.brand)
print("内存大小:", self.size)
# 创建对象
computer = Computer()
# 访问属性 对象名.属性
print(computer.brand)
# 访问方法 对象名.方法()
computer.show_info()
(2)形式为“_xx”或“_xx()”–私有化[ 使用不多]。即前置单下划线,为私有化属性或方法,类对象和子类可以访问,且需要注意的是*若采用“from 模块名 import ”的形式导入不了该类私有化属性或方法
# coding:utf-8
class Computer(object):
def __init__(self):
# 私有属性
self.__price=2
def show_info(self):
print("私有属性:",self.__price)
def __fun(self):
print("--私有方法--")
# 创建对象
computer = Computer()
# 访问私有化属性 对象名._类名__属性名
print("名字重整的方式访问私有属性:",computer._Computer__price)
#访问私有方法
fun=computer._Computer__fun
fun()
(4)形式为“xx”或“xx()”即前后双下划线,通常为 Python 系统提供的属性、模块或魔法方法,如:main、init()等,建议开发者不要以这种形式命名
(5)形式为“xx_”或“xx_()”即后置单下划线,通常是开发者用于避免与 Python 关键字冲突而命名的。
# coding:utf-8
"""
标识符的命名规则:
1.由字母、数字、下划线组成;
2.不能使用关键字作为命名;
3.开头不能是数字;
4.区分大小写、对大小写敏感;
5.对长度没有限制。
"""
a = 100
print(a)
_else = 100
print(_else)
return_ = 90
print(return_)
2**.属性property**
开头说的setter和getter方法处理时不太方便.原因:获取属性值之前,需要先设置属性值。步骤:①设置属性值,setter;②获取属性值,getter。
首先,从一个自定义类 Student 说起,给该类的年龄属性进行封装,即写 getter 与 setter 方法,此时需要对年龄属性进行私有化。
class Student(object):
def __init__(self):
self.__age = 0
def set_age(self, age):
# if 0 <= age and age <= 140:
if 0 <= age <= 140:
self.__age = age
else:
self.__age = 0
# self.__age = age
def get_age(self):
return self.__age
# 使用 :创建对象
student = Student()
#设置属性
student.set_age(-18)
print("年龄值:",student.get_age())